如何阻止管道中的写入,直到读取发生? (在 C 中)

Posted

技术标签:

【中文标题】如何阻止管道中的写入,直到读取发生? (在 C 中)【英文标题】:How to block writing in pipes, until the read has taken place ? (in C) 【发布时间】:2010-12-24 15:19:35 【问题描述】:

我目前正在编写一些 C 程序,我想知道是否有机会阻止写入进程中的写入(直到读取完成)?即我在父进程和子进程之间有 3 个管道(父进程写入,子进程读取),我想让父进程只写入完成读取的进程:)

我希望它很清楚..

提前致谢。

【问题讨论】:

【参考方案1】:

bmargulies 是正确的。然而,创建更复杂协议的另一种方法是在父进程中使用多个线程——每个子进程一个线程。一个线程可能会因子进程缓慢而阻塞,但其他线程可以继续处理它们的子进程。根据您的问题的详细信息,这可能会解决问题。

【讨论】:

所以没有办法确定管道中的其他进程是否因读取而阻塞?.. 看来我要使用信号了【参考方案2】:

内核对管道有缓冲区限制,如果缓冲区填满,写入程序将阻塞。

如果您想使用自己的消息边界来执行此操作,而不仅仅是基于缓冲区大小,那么您可以构建一个更复杂的协议,例如在发送之前让管道上的读取器阻塞另一种方式没有了。

【讨论】:

以上是关于如何阻止管道中的写入,直到读取发生? (在 C 中)的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止在 Ruby 中读取命名管道?

在 bash 中打开命名管道,而不读取或写入它

为啥在没有人阅读后继续写入命名管道?

如何写入命名管道而不等待读取管道

C、是不是可以阻塞进程直到管道再次打开?

在C中读取和写入结构到管道