我正在尝试在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