我正在尝试在 Linux 中编写一个简单的守护程序,它将创建一个 FIFO,然后收集写入 FIFO 的任何内容,并稍后将该数据写入文件。
我的期望是,一旦我的守护进程创建了 FIFO,我就可以重复执行“echo text > /myfifo”。完成后,我可以执行“echo quit > /myfifo”,我的程序将退出并将所有数据写入磁盘。
我目前正在使用 poll() 来了解 FIFO 上何时有更多数据。这工作正常,直到我第一次将数据回显到 FIFO 之后。数据回显良好,但此后我的民意调查不断返回 SIGHUP。
在每个进程写入 FIFO 后,我是否需要重置(或关闭并重新打开)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);