我有一個進程正在運行,它基本上用作緩存並通過命名管道與其他進程通信。定期這些其他進程可能會將消息發送到高速緩存進程。現在原則的會是什麼緩存處理工作對我來說是這樣的:命名管道:如何封閉,直到封閉寫入面重新打開?
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