我有一个运行的进程,基本上作为缓存,并通过命名管道与其他进程通信。这些其他进程可能会定期向缓存进程发送消息。现在原则上对于我在缓存进程中能够起作用的是:
while(true) {
int read_status = read(fifo_fd, buffer, BUFFER_SIZE);
if (read_status > 0) {
//at least a byte was read -> do something with the message
}
}
但这显然会影响性能,因为
read()
在EOF
时立即返回,在管道中没有可读内容时会导致繁忙等待循环。(编辑)我之所以接收到EOF,是因为写入进程可能多次执行以下循环:open()
write()
close()
如果管道中除了EOF没有其他字符,我希望整个循环都是阻塞的。我还调查了select()
和poll()
,它们对于EOF
也不是阻塞的。
为什么我需要这个?
缓存过程应该是一个守护进程,其他进程应该在用户调用相应二进制文件时与该守护进程通信。