当前位置: 技术问答>linux和unix
关于跨越fork调用使用管道,会打开4个文件描述符?
来源: 互联网 发布时间:2017-01-10
本文导语: 刚刚开始学习,请教一下pipe掉用产生的文件描述符。 书上说的: 先调用 pipe(filedescriptor); 然后调用 fork(); 那么子进程和父进程都可以访问管道的文件描述符,所以共有 4个文件描述符。 问啥是4个...
刚刚开始学习,请教一下pipe掉用产生的文件描述符。
书上说的:
先调用
pipe(filedescriptor);
然后调用
fork();
那么子进程和父进程都可以访问管道的文件描述符,所以共有 4个文件描述符。
问啥是4个呢?
我在父进程和子进程中输出filedescriptor[0]结果都是3。
在父进程中先 close(filedescriptor[0]),write(filedescriptor[1]);
在子进程 read(filedescriptor[0]) 还是可以读出数据的。这是问什么呢,我已经先把文件描述符filedescriptor[0]也就是3给关了呀???
书上说的:
先调用
pipe(filedescriptor);
然后调用
fork();
那么子进程和父进程都可以访问管道的文件描述符,所以共有 4个文件描述符。
问啥是4个呢?
我在父进程和子进程中输出filedescriptor[0]结果都是3。
在父进程中先 close(filedescriptor[0]),write(filedescriptor[1]);
在子进程 read(filedescriptor[0]) 还是可以读出数据的。这是问什么呢,我已经先把文件描述符filedescriptor[0]也就是3给关了呀???
|
补一句就是:文件描述符和进程ID什么的不一样,不是全局唯一的,而是进程独立的。
楼主你要搞过windows,我一提内核对象句柄你肯定就知道是怎么回事了。
楼主你要搞过windows,我一提内核对象句柄你肯定就知道是怎么回事了。
|
管道是半工的。。。
[0]用来读,[1]用来写。
fork创建子进程,子进程会继承父进程的打开的文件描述符。
所以父进程不需要读得话关闭[0],子进程不需要写的话关闭[1]。
父子进程是独立的两个进程,fork后两者独立,只不过都打开了同一个管道而已,其中一个进程关闭什么与另一个进程无关。
[0]用来读,[1]用来写。
fork创建子进程,子进程会继承父进程的打开的文件描述符。
所以父进程不需要读得话关闭[0],子进程不需要写的话关闭[1]。
父子进程是独立的两个进程,fork后两者独立,只不过都打开了同一个管道而已,其中一个进程关闭什么与另一个进程无关。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。