送给大家一句话:
人真正的名字是:欲望。所以你得知道,消灭恐惧最有效的办法,就是消灭欲望。 – 史铁生 《我与地坛》
开始了解重定向
1 前言
上一篇文章我们复习了C文件IO相关操作,了解了linux下的文件系统调用(open write read
),认识了文件描述符fd值,今天我们来学习重定向和缓冲区,这个缓冲区之前遇到过很多次,比如进度条项目的刷新缓冲区操作。然后我们可以来尝试封装一下系统调用,模拟C语言的文件库。
2 重定向与缓冲区
2.1 文件描述符分配规则
接下来我们来了解重定向!
首先我们来看fd文件描述符的分配规则,我们写一段代码来看:
1 #include<stdio.h>
2 #include<sys/types.h>
3 #include<sys/stat.h>
4 #include<fcntl.h>
5 #include<unistd.h>
6 #include<string.h>
7 #include<stdlib.h>
8
9 const char* filename = "log.txt";
10
11
12 int main()
13 {
14
15 int fd = open("myfile", O_RDONLY);
16 if(fd < 0){
17 perror("open");
18 return 1;
19 }
20 printf("fd: %d\n", fd);
21 close(fd);
22 return 0;
23 }
我们运行来看:
这和我们的预期是一样的,我们文件操作那篇文章讲解了fd 的 0 1 2 分别代表了标准输入,标准输出,标准错误。那么在创建的文件描述符很自然的就使用了3! 那么加入我们关闭012中的文件呢,那么新打开的文件描述符会是3吗???
1 #include<stdio.h>
2 #include<sys/types.h>
3 #include<sys/stat.h>
4 #include<fcntl.h>
5 #include<unistd.h>
6 #include<string.h>
7 #include<stdlib.h>
8
9 const char* filename = "log.txt";
10
11
12 int main