我正在尝试使用 FIFO 进行交互处理。但是当尝试创建 FIFO 然后打开它时,我的程序挂起(无法退出)。
if (mkfifo("./fifo.txt", S_IRUSR | S_IWUSE) < 0) {
fprint("Can not create fifo");
return 1;
}
if ((readfd = open("./fifo.txt", O_RDONLY)) < 0) {
return 1;
}
我在这里做错了什么?
非常感谢。
最佳答案
阅读fifo(7) ,特别是:
Normally, opening the FIFO blocks until the other end is opened also.
所以我猜您调用 open(2)被阻止。也许您想传递 O_NONBLOCK
标志。
您应该使用strace(1)调试您的程序(也许还可以strace
fifo 另一端的其他程序)。并调用perror(3)出现错误。
也许使用 unix(7)套接字可能更适合您的情况。然后您可以poll(2)之前accept(2)
您应该阅读Advanced Linux Programming .
关于c - 使用 mkfifo() 和 open() 的程序无法退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41218086/