如果我在同一个程序中打开一个 FIFO 进行读写会发生啥?

Posted

技术标签:

【中文标题】如果我在同一个程序中打开一个 FIFO 进行读写会发生啥?【英文标题】:What happenes if i open a FIFO for read and write in the same program?如果我在同一个程序中打开一个 FIFO 进行读写会发生什么? 【发布时间】:2019-06-11 14:32:22 【问题描述】:

我开始学习管道和 FIFO,但我不明白在这种情况下后台会发生什么。为什么控制台中没有打印任何内容?没有其他进程打开“abc”FIFO

`int r,w,n=7;
r=open("abc",O_RDONLY);
n--;
w=open("abc",O_WRONLY);
n--;
printf("%d",n);`

【问题讨论】:

Using named pipes in a single process的可能重复 【参考方案1】:

正如https://***.com/a/23435538/139985 解释的那样,当您打开一个 FIFO 时,open 调用将阻塞,直到系统在同一 FIFO 的另一侧获得相应的打开。

在您的示例中,您有一个单线程 C 程序,它尝试一个接一个地打开两侧。那是行不通的。

但是,如果您重新设计程序以使用两个线程并在不同线程中打开 FIFO 的读取和写入端,那应该可以。一个线程将阻塞open,直到另一个线程调用open

【讨论】:

以上是关于如果我在同一个程序中打开一个 FIFO 进行读写会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

Linux fifo 缓冲采坑

POSIX FIFO 在阻塞模式下打开时冻结

FIFO调用open时阻塞

linux fifo 读写需要锁吗

Xilinx ISE FIFO读写操作仿真学习

ARM9 串口fifo大小