这是我所做的,并且有效:
“服务器”端(读取器)伪代码
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。
答案 0 :(得分:0)
是的,应该是这样的。
命名管道的行为与匿名管道的行为相同:它们都代表一个流,该流在最后一个作者关闭时终止。具体来说,读者不要永远挂死,以防万一将来的某个程序决定打开管道并继续书写。
如果您希望通过文件进行基于分组的通信,那么如何在数据报模式下使用Unix套接字呢?