如何使C程序阻塞,直到FIFO管道为空



我正在使用命名(FIFO)管道进行IPC,我想协调一下,只有当读取管道的程序已经从管道中读取了以前写入的数据时,程序才能写入管道。所以我想阻止写入,直到管道为空。这可能吗?

我认为有一个选项是,当管道满了时,写函数会阻塞。但我想对比Linux中的管道大小小得多的数据量执行此操作。E.g我希望这个程序只能写20个字节,然后等待另一端读取数据。我认为你不能把命名管道缩得这么小。(最小大小似乎是页面文件大小(4096字节)?)

谢谢!

一个可能的解决方案是让读取进程在读取某些数据时向写入进程发送信号。您可以使用kill()将SIGTERM发送到编写器,因为SIGTERM可以被捕获和处理。

最新更新