我们知道 pipe 可以产生一对管道,用于两个进程之间的单工通信,今天在接触一个代码的时候,发现他有一个做法:为每个进程都准备读写管道的文件描述符,同时,赋初始值为 0 和 1,然后根据需要,再进行或者不进行 pipe 管道的创建,之后进行一些业务逻辑,在后面,进行一个硬编码的比较:如果该进程的管道文件描述符为 0 或者 1,就不做操作,反之如果不是这两个值,就认为是生成的管道描述符,并调用 close 函数进行关闭。
这自然让人出现一个疑问,那就是 pipe 产生的文件描述符会不会可能刚好就是 0 或者 1 呢,动手实验一下
for (int i = 0; i < 10; ++i) { int fds[2]; pipe(fds); printf("%d\n", fds[0]); printf("%d\n", fds[1]); }
输出是这样的
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
看来 pipe 在实现的时候就已经有所保留了
==========================================
2013-01-30 15:53:00 update 在查阅资料的时候发现这里,http://www.cnblogs.com/jht/arc…
dup,dup2函数
这两个函数的功能是输出的重定向
定义这两个函数的头文件是unistd.h,有兴趣的可以自己看看这个头文件包含的内容要提的是这个头文件同时定义了下面三个常量
STDERR_FILENO = 2 标准错误输出
STDIN_FILENO = 0 标准输入
STDOUT_FILENO = 1 标准输出