每条消息后需要在读取侧关闭linux FIFO

时间:2019-01-16 19:42:40

标签: linux fifo

这是我所做的,并且有效:

“服务器”端(读取器)伪代码

mkfifo()
while (true){
    open()
    select(...NULL)
    while (select... timeval(0)) {
        read()
    }
    close()
}

“客户端”端(编写器)真正的C代码

int fd;
char * myfifo = "/tmp/saveterm.fifo";
char *msg = "MESSAGE";
fd = open(myfifo, O_WRONLY);
write(fd, msg, strlen(msg));
close(fd);

现在,您看到每个事件读取后,我需要打开/关闭服务器上的fifo。应该是这样吗?最初,我只在循环之前将其打开一次,但是在收到第一条消息之后,“ select”调用将永远不会再次阻塞,直到关闭并重新打开为止,并且始终为描述符返回1和ISSET。

1 个答案:

答案 0 :(得分:0)

是的,应该是这样的。

命名管道的行为与匿名管道的行为相同:它们都代表一个流,该流在最后一个作者关闭时终止。具体来说,读者不要永远挂死,以防万一将来的某个程序决定打开管道并继续书写。

如果您希望通过文件进行基于分组的通信,那么如何在数据报模式下使用Unix套接字呢?