写入管道的进程是否可以告诉读取器(在不同的进程中)阻塞,因为它试图从管道中读取并且管道当前是空的?
如果管道无法做到这一点,是否可以使用其他形式的IPC?
我怀疑答案是否定的,但我想我还是会问。
这种情况的用例是仅在读者确实需要数据时才写入管道。
答案 0 :(得分:1)
据我所知,它可以直接不(仅使用管道)。即使您知道管道缓冲区的大小(您可以通过调用fpathconf(pipefds[0],_PC_PIPE_BUF))
获得)并且您知道它是空的,但仍然有无保证,而另一个进程实际上是从它。即使它正在读取,也可以在非阻塞模式下进行。您可能会尝试找出其他进程是否在某些系统调用(例如,read)上出现了问题,但即使这样也没有用(其他进程可能正在阅读其他内容)。
我想到的唯一方法是使用进程信号量。这要求另一个(例如子进程)进程确切地知道要使用哪个信号量以及如何使用它。您可以测试信号量是否被锁定。