设为首页 收藏本站
查看: 680|回复: 0

[经验分享] Linux C基础

[复制链接]

尚未签到

发表于 2017-11-17 14:31:13 | 显示全部楼层 |阅读模式
1.选对平台很重要:
  如果说把C语言比作一只猛虎,那么windows就是人为的一个动物园。猛虎随强大,终究有所束缚。而Linux则是这只猛虎的森林,在抛弃windows下编写C语言转而在Linux下编写C语言犹如王者归来!

2.上古神器Vi:
  在windows有诸如Microsoft Visual C++这样的集成开发环境,那么在Linux中我们该如何编写源代码,编译,调试,执行呢?我们在windows上编写Hello world程序时,编译器屏蔽了很多细节。我们将在Linux中一步步让这些细节重现。这时,让我们先来掌握一个上古神器Vi吧! 以下是常用的Vi命令:



vim hello.c           //打开文件进行编辑
i                     //插入
I                     //插入到单词最前
a                     //追加
A                     //追加到单词的末尾   
v                     //视图模式
Esc                   //命令模式
jkhl                  //上下左右
Ctrl+n                //补全命令
:q                    //退出
:q!                   //强制退出
:wq                   //保存并推迟

3.从stdio.h说起:
  我们每次都引入stdio.h这个文件,那么这个文件有什么用呢?它在哪儿呢?请看下图(Ctrl+n后可以看到):
DSC0000.png

  好了,可以想到C语言第一行#include的东西应该全在上图显示的文件夹了。我们不管看懂看不懂进去看看总没有错。利用  ls *.h 查看所有.h结尾的文件:
DSC0001.png

  这时,我们就可以看看到底这些用include包含进来的文件长啥样了。有兴趣的读者自行阅读哦(笔者看不懂啊)。
  说简单点:stdio == standard input and output 就是标准输入输出,也就是从键盘得到的字符作为标准输入,输出到屏幕作为标准输出。对应的两个函数为scanf和printf。这两个函数的原型其实是这样:



scanf("%d",&a);      ==      fscanf(stdin,"%d",&a);
printf("Hello world!")  ==      fprintf(stdout,"Hello world");
  那假如有100条动态生成的数据需要输入到一个程序中,我们还要从键盘手工输入吗?1000条呢?答案是No。做一个简单的实验:



//这是mkaedata.c
#include<stdio.h>
int main(int argv,char *argc[])
{
int i;
for(i=0;i<=100;i++) {
printf("%d\n",i);
}
return 0;
}



gcc makedata.c -o makedata.out   //编译makedata.c
./makedata.out > data.txt      //将输出重定向到data.txt文件
  这时data.txt中有了0-100这些数据
  接着,利用这些数据就可以搞事情:



//这是sum.c
#include<stdio.h>
int main(int argv,char *argc[])
{
int i=0;
int sum=0;
for(i=0;i<=100;i++) {
printf("读取到%d条数据\n",i+1);
scanf("%d",&i);
sum += i;
}
printf("The sum is %d\n",sum);
return 0;
}



gcc sum.c -o sum.out
./sum.out < data.txt    //将data.txt中的数据作为输入
  结果就是这样:
DSC0002.png

  此处省去半截图:)

4.为什么是  int main?
  因为要返回一个0啊,嘿嘿。当然,这是程序执行成功后的返回。在上边程序执行完成的基础上运行下边的命令:
DSC0003.png

  $? 就是程序执行完的返回值,当我们将 return 0 注释的话这里的返回值就变得不确定了,感兴趣的话自己尝试:)
  这时,通过修改data.txt中的数据,我们就可以通过返回值做点事情:



#include<stdio.h>
int main(int argv,char *argc[])
{
int i=0;
int sum=0;
for(i=0;i<=100;i++) {
printf("读取到%d条数据\n",i+1);
scanf("%d",&i);
sum += i;
}
if(sum==5050) {
printf("The sum is %d\n",sum);
return 0;
}else {
fprintf(stderr,"我不想的到这个值:(\n");
return -1;
}
}
DSC0004.png

  为什么变成了255?  其实我也不知啊(请教各位解惑)。总之,通过错误流可以处理一些逻辑的。

5.主调函数的参数 (int argv,char *argc[]) 是什么鬼?
  是骡子是马,打印出来瞧瞧:)



#include<stdio.h>
int main(int argv,char *argc[])
{
printf("The argv is :%d",argv);
int i;
for(i=0;i<argv;i++){
printf("第%d个参数的值为:%s\n",i+1,argc);
}
return 0;
}
DSC0005.png

  给出一个范例,聪明的你一定知道这两个参数是神马鬼了吧:)

6.第一次写博客,不喜qing喷,嘿嘿:)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-407908-1-1.html 上篇帖子: Linux 进程与信号的概念和操作 linux process and signals 下篇帖子: 思维之际更专注、更自由!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表