pipe 函数产生的文件描述符

我们知道 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 标准输出

Leave a Reply

Your email address will not be published. Required fields are marked *