当前位置:  技术问答>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给关了呀??? 

|
补一句就是:文件描述符和进程ID什么的不一样,不是全局唯一的,而是进程独立的。
楼主你要搞过windows,我一提内核对象句柄你肯定就知道是怎么回事了。

|
管道是半工的。。。

[0]用来读,[1]用来写。

fork创建子进程,子进程会继承父进程的打开的文件描述符。

所以父进程不需要读得话关闭[0],子进程不需要写的话关闭[1]。

父子进程是独立的两个进程,fork后两者独立,只不过都打开了同一个管道而已,其中一个进程关闭什么与另一个进程无关。


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • div层跨越iframe帧显示在上面的解决方法附代码


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3