【问题标题】:what happens if we do not close the used end in pipe: Linux/C如果我们不关闭管道中使用的一端会发生什么:Linux/C
【发布时间】:2015-11-10 09:01:13
【问题描述】:

假设我们有一个管道,父级在上面写,子级正在从管道中读取。 我们知道父母应该在写作之前关闭阅读端,孩子应该在阅读之前关闭写作端。 但我想知道: 家长写完后是否必须关闭写端?同样,孩子阅读完后需要关闭阅读端吗? 如果是强制性的,为什么会这样?

【问题讨论】:

    标签: c linux pipe fork


    【解决方案1】:

    这不是强制性的,但您可能想要这样做,尤其是在管道的写入端

    管道端文件描述符是对它们后面的管道端实体的计数引用。当你dup一个pipe-end filedescriptor或者当你fork一个带有开放pipe-end的进程时,新的引用到同一个pipe-end实体 被创建并且引用计数增加(每个close 减少它)。

    为了关闭一个写作端变成一个EOF在另一端(通常是可取的,否则消费者(阅读端 ) 不知道何时停止读取),writing-end filedescriptor 需要是对 writing-end entity 的最后引用——仅考虑管道的写入端如果对该写入端实体的所有引用(文件描述符)都已关闭,则关闭。

    (此行为适用于所有文件描述符,不限于管道端文件描述符。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      相关资源
      最近更新 更多