管道作者可以告诉读者何时阻止?

时间:2012-03-07 16:28:47

标签: unix ipc pipe

写入管道的进程是否可以告诉读取器(在不同的进程中)阻塞,因为它试图从管道中读取并且管道当前是空的?

如果管道无法做到这一点,是否可以使用其他形式的IPC?

我怀疑答案是否定的,但我想我还是会问。

这种情况的用例是仅在读者确实需要数据时才写入管道。

1 个答案:

答案 0 :(得分:1)

据我所知,它可以直接(仅使用管道)。即使您知道管道缓冲区的大小(您可以通过调用fpathconf(pipefds[0],_PC_PIPE_BUF))获得)并且您知道它是空的,但仍然有无保证,而另一个进程实际上是从它。即使它正在读取,也可以在非阻塞模式下进行。您可能会尝试找出其他进程是否在某些系统调用(例如,read)上出现了问题,但即使这样也没有用(其他进程可能正在阅读其他内容)。

我想到的唯一方法是使用进程信号量。这要求另一个(例如子进程)进程确切地知道要使用哪个信号量以及如何使用它。您可以测试信号量是否被锁定。