如果我在同一个程序中打开一个 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 进行读写会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章