热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

How many read or write file descriptors will be there in total in the above code? How many pipes would be created in total? What all data will be copied on to the child processes from their respective parent processes? Please explain the working of the program too.

上面的代码中总共会有多少个读写文件描述符?总共会创建多少个管道?什么所有数据将从各自的父进程复制到子进程?请解释一下该程序的工作原理。

1 个解决方案

#1


2  

The first fork(); creates one child; the second fork(); is run by the father and the child, so you get one second child and a grandchild. So in all you get 4 processes.

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

Each process has 7 opened FDs : 0,1,2 plus fd1[0,1] plus fd2[0,1]). Thus there are 7 times 4 = 28 opened fds.

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

Note that calling fork without checking error/child/father is a very bad idea !

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

See the output of one of the 4 running processes using lsof -p :

使用lsof -p 查看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

推荐阅读
author-avatar
QueenieYam任嘉明
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有