c - 使用 mkfifo() 和 open() 的程序无法退出

标签 c fifo

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

相关文章:

Linux fifo(命名管道)O_NONBLOCK 中断管道

c - FIFO 读入 c 得到段错误

c - 从变量的地址获取变量的名称?

python - 超出递归深度 - Python 双向链表

c - 生成n个0到k区间的随机数,n可以大于k

c ncurses,窗口边框问题

c - sem_wait 上的线程阻塞导致其他线程挂起

C 使用 select() 从两个命名管道(FIFO)中读取

c - C中按位异或的打印结果

c - 段错误是在内存修改之前还是之后抛出的?