1、一种工具叫过滤器(filter),逐行读取数据,对数据进行处理,再把数据写到某个地方。
head:显示文件头几行。
tail:显示文件最后几行。
sed:流编辑器(stream editor),用来搜索和替换文本。
2、可以用重定向使文件不用改代码,甚至不用重新编译就可以让程序使用文件。
3、在程序运行时,操作系统会创建标准输入和标准输出,使操作系统可以从键盘外的地方读数据,往显示器外的地方写数据。
4、<操作符告诉操作系统,程序的标准输入应该与data.csv文件相连,而不是键盘。
data.csv-->geo2json
>操作符把标准重定向到文件。 geo2json-->output.json
5、在程序运行结束后检查错误状态
(1)MAC,Linux,UNIX:
$ echo $?
(2)Window使用Cygwin:
echo %ERRORLEVEL%
6、标准错误,一个用来发送错误消息的二号输出。
7、输入只有一个标准输入,输出有标准输出和错误输出。
8、未使用重定向时,标准输入来自键盘,标准输出和标准错误发送到显示器;当使用重定向,标准输入来自文件,标准输出发送到文件,标准错误仍然发送到显示器。
9、printf()只是fprintf()函数的特例;
printf(“我喜欢乌龟"); <==> fprintf(stdout,"我喜欢乌龟”);
fprintf()把文本发送到stdout(标准输出),也可以发送到stderr(标准错误);
10、可以用fscanf()从stdin(标准输入)中读取数据。
11、>重定向标准输出 2>重定向标准错误。
12、小工具原则:从标准输入读取数据;在标准输出显示数据;处理文本数据,而不是难以阅读的二进制格式;只做一件简单的事。
13、符号|表示管道(pipe),他能连接一个进程的标准输出与另一个进程的标准输入。
bermuda | geo2json
14、小工具只能串在一起使用,因为一个小工具只能解决一个问题,而无法解决整个问题,所以需要使用管道将他们串联起来。一连串相连的进程叫流水线(pipeline)
15、两个用管道相连的程序可以同时开始运行。
16、为什么小工具要使用文本:文本是一种开放格式,程序员可以用文本编辑器来查看小工具的输出,并理解里面的内容,相比之下,二进制格式就难懂多了。
17、当用管道连接多个进程时,<与>分别重定向哪个进程的标准输入、哪个进程的标准输出?
<会把文件内容发送到流水线中第一个进程的标准输入,>会捕获流水线中最后一个进程的标准输出。
18、两个相连的小工具需要用括号括起来。
19、每条数据流用一个指向文件的指针指示,用fopen()创建新数据流。
20、fopen()函数接收两个参数:文件名和模式,共三种模式:w,r,a。
FILE *in_file = fopen("input.txt","r");
21、文件流创建后,可以用fprintf()往数据量中打印数据,用fscanf()从文件中读取数据。
fprintf(out_file,"不要穿%s色的衣服和%s色的裤子","红","绿");
fscanf(in_file,"%79[^\n]\n",sentence);
使用完后需要关闭:
fclose(in_file);
fclose(out_file);
22、数据流的数量取决于操作系统,一般一个进程最多有256条数据流。
23、FILE最早用宏定义,宏的名称都要大写。
24、main()函数的第二种形式:(grac用来记录数组中元素的个数)
int main(int argc,char *argv[ ]){ }
25、用户运行程序时,命令行中第一个参数是程序名。
26、ps -ae //显示所有进程,包括后台运行的进程
tail -f logile.out //持续显示文件末尾新添加的数据。
27、库函数getopt(),用来简化处理过程,需要unistd.h头文件,其不属于C标准库,而是POSIX库中的一员。POSIX的目标是创建一套能够在所有主流操作系统上运行的函数。
28、getopt()工作:
rocket_to -e 4 -a Brasilia Tokyo London
4指使用四台引擎 -e代表“引擎” -a代表“无敌模式”
29、
ae告诉getopt()函数“a和e是有效选项”,e后面的冒号表示“-e后面需要再跟一个参数”,getopt()会用optarg变量指向这个参数。
30、两个选项可以合并并且改变顺序:可以用-td now 代替-d now -t
31、读取完全不选项后,应该用optind变量跳过它们。