我正在嘗試在Linux中編寫一個簡單的守護進程,它將創建一個FIFO,然後收集寫入FIFO的任何內容,並在稍後將該數據寫入文件。無法正常使用Unix FIFO嗎?
我的期望是,一旦我的守護進程創建了FIFO,我就可以反覆執行「echo text>/myfifo」。完成後,我可以執行「echo quit>/myfifo」,我的程序將退出並將所有數據寫入磁盤。
我目前使用poll()來了解FIFO上有更多數據。這工作正常,直到我第一次回數據到FIFO。數據回覆良好,但我的調查在此之後不斷返回SIGHUP。
在每個進程寫入之後,是否需要重置(或關閉&重新打開)FIFO?我的代碼
僞代碼如下所示:
ret = fifo(my_fifo, mode);
fd = open(my_fifo, O_RDONLY | O_NONBLOCK);
polling.fd = fd;
polling.events = POLLIN | POLLPRI;
do {
ret = poll(&polling, 1, -1);
amt = read(fd, buf, bufsize);
// do stuff
} while (!done);
是的,FIFO必須重新打開。很多人忘記了在同步模式下,打開FIFO會阻塞,直到通信的另一端也打開它。這是爲了使其可用於例如外殼重定向。所以在某種程度上,它表現得像一個連接。 – Dummy00001 2010-07-11 19:39:29