Linux C基本原理
C语言小巧灵活,语法简单,适合做一些小工具。如果用C语言做出各种各样的小工具,并结合起来,整个Unix/Linux系统就是这样来的;C语言还能用来做与硬件打交道的程序,比如操作系统,单片机,ARM嵌入式,Arduino;C语言还用来做一些有高性能要求的应用程序,比如Nginx。
C语言是随着Unix而诞生的语言,在Unix下开发C语言才是真正的开发。MAC的操作系统是Unix内核的,Windows是没法装Unix的,所以要用Linux,Linux是和Unix完全兼容的。
make
make工具内部用的是gcc,用Makefile来统一描述代码之间的关系。举例:
#this is makefile 注释
#源文件:需要链接的文件
hello.out:max.o min.o hello.c
#Tab(6个空格) 命令 表示最终编译出hello.out的命令
gcc max.o min.o hello.c -o hello.o
#找到max.o min.o怎么来的
max.o:max.c
gcc max.c
min.o:min.c
gcc min.c
然后在当前目录直接用make命令。makefile的一个优点就是已经编译生成的.o文件如果没有改动,下次编译不会再重新编译。
main函数
C语言再Linux中运行的时候,是可以与操作系统交互的,
int main(int argv,char* argc[])
{
return 0;
}
Linux的指令gcc main.c -o main.out && ./main.out
表示&&前的指令执行成功后执行后面的指令,那么怎么判断前面的成功了呢?执行完一个命令或者运行完一个程序之后执行指令echo $?
,如果结果是0,说明是正常执行,否则返回错误码,就是main的返回值。例如,如果main中return 101
,gcc之后执行./main.out && ls
,ls指令就不会执行,并且指令echo $?
的结果就是101。
main函数的两个参数,argv表示命令的参数个数,argc表示参数具体是哪些。例如,./main.out
命令,argv就是1,./main.out -ls
,argv就是2。
输入,输出,和错误流
重定向
标准的输入流是0,标准的输出流是1,不写默认是输出流。例如,命令./a.out 1>> a.txt
就表示把标准输出流从原来的终端重定向到文本文件中,并且>>
表示如果多次重定向,文件中的内容不会覆盖,而是追加在后面,>
就表示覆盖文件。
再例如,ls /etc >> etc.txt
就表示把etc目录下的所有文件名列表存在etc.txt文件中。
管道
Linux中多个小工具如何结合起来使用?Linu