【问题标题】:What will happen to Linux pipe() if one end closes before other如果一端先于另一端关闭,Linux pipe() 会发生什么
【发布时间】:2016-09-30 03:31:45
【问题描述】:

我通过 pipe() 系统调用进行进程间通信。孩子写入一端,父母应该读取管道的另一端。

父母在开始阅读之前,waitpid() 让孩子完成完成。如果孩子以非零返回值退出 - 那么它表明孩子有错误。所以 parent 只需关闭管道描述符并继续前进而不读取。

你认为这会在孩子成功完成的情况下起作用吗?父母在阅读管道之前有效地收割了孩子?如果是,那么传输中的数据会怎样?操作系统会处理安全到达父端的数据吗?

【问题讨论】:

    标签: linux operating-system pipe


    【解决方案1】:

    父进程打开一个管道。 PDT 中的两个指针将指向管道。一写一读。

    每当使用 fork 创建子进程时,都会复制 PDT。因此,子进程将在 PDT 中有自己的指针指向 PIPE。

    起初,管道是空的,如果父进程试图读取,它会阻塞。 而且您永远不会创建子进程。这最终会陷入僵局。

    如果在读取之前关闭写入端,就不会出现死锁,但是子进程将无法写入管道(阅读上面的原因)。

    所以这应该是你的流程:

    1. Parent process creates pipe
    2. fork()
    3. in parent process you close the writing end
    4. in child process you close the reading end
    5. read/write to pipe. 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-31
      • 2018-08-28
      • 1970-01-01
      • 2011-03-13
      • 2015-07-15
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      相关资源
      最近更新 更多