我有一个进程正在运行,它基本上用作缓存并通过命名管道与其他进程通信。定期这些其他进程可能会将消息发送到高速缓存进程。现在原则的会是什么缓存处理工作对我来说是这样的:命名管道:如何封闭,直到封闭写入面重新打开?
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
也都没有阻止。
为什么我需要这个?
缓存过程应该是一个守护进程,其他进程应该在用户调用相应的二进制文件时与该守护进程进行通信。
Eh?在两端打开的命名管道*不在EOF处。 – 2014-08-27 20:55:55
就像这样:一个进程可能打开管道,写入管道,关闭它并在任何时间点重复这个循环。 EOF现在有意义吗? (我不熟悉这个领域) – ben 2014-08-27 20:57:53
啊!这更有意义,是的。一种选择是打开RW--然后它不会是EOF - 另一种选择是使用特定于平台的API,例如inotify在其他人打开管道时收到通知。 – 2014-08-27 20:59:48