问题描述
背景
基本上,我发现了有关命名管道的文章:
Inter Process Communication - Named Pipes - Tutorialspoint
我在MacOS(Catalina)上构建了这些示例,乍一看还不错。
问题
基于fifoserver_twoway.c
和fifoclient_twoway.c
的示例,我已经编写了自己的代码,但没有用。从一个进程发送的数据有时会被另一进程读取,但是更多时候同一进程正在读取自己的数据。
在乞讨时,我虽然我的代码有错误(我讨厌“全部在主代码中”),但是后来我意识到我的代码是自动化的,因此竞争条件开始了。所以我确实对原始示例和相同的问题进行了更快的数据输入出现。
实际上,当我使用此输入文件时:
123456
abcdefgh
FooBar
end
并将其提供给客户的stdin
:
./fifoclient_twoway <testData.txt
客户端读取它发送的所有数据,除了end
结束两个进程的正确性(客户端在发送end
之后不尝试读取数据)。因此,基本上教程中的代码是错误的。
问题
是否有一些简单的方法来防止读取同一进程已写入的数据,并允许其他进程读取数据并发送响应(解决竞争条件),而无需将此管道分成两个单向管道?
旁注
我在Windows上没有发现双工命名管道的相同问题
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)