总共会有多少个读写文件描述符?

时间:2016-02-13 18:11:33

标签: c pipe fork ipc system-calls

main() {
    int fd1[2],fd2[2];
    pipe(fd1);
    pipe(fd2);
    fork(); 
    fork();
}

上述代码中总共有多少个读写文件描述符?总共会创建多少个管道?什么所有数据将从其各自的父进程复制到子进程?请解释该计划的运作情况。

1 个答案:

答案 0 :(得分:2)

第一个fork();创造一个孩子;第二个fork();由父亲和孩子经营,所以你得到一个孩子和一个孙子。所以总共有4个流程。

每个进程有7个已打开的FD:0,1,2加fd1[0,1]fd2[0,1])。因此有7次4 = 28次打开fds。

请注意,调用fork而不检查错误/ child / father是一个非常糟糕的主意!

使用lsof -p <pid>查看4个正在运行的进程之一的输出:

a.out   13147 thiel    0u   CHR  136,1      0t0       4 /dev/pts/1
a.out   13147 thiel    1u   CHR  136,1      0t0       4 /dev/pts/1
a.out   13147 thiel    2u   CHR  136,1      0t0       4 /dev/pts/1
a.out   13147 thiel    3r  FIFO    0,8      0t0 1143532 pipe
a.out   13147 thiel    4w  FIFO    0,8      0t0 1143532 pipe
a.out   13147 thiel    5r  FIFO    0,8      0t0 1143533 pipe
a.out   13147 thiel    6w  FIFO    0,8      0t0 1143533 pipe