在Unix上命名管道(FIFO)与多个读者

Vla*_*ala 33 unix fifo

我有两个程序,Writer和Reader.

我有一个从Writer到Reader的FIFO,所以当我在Writer中写入stdin的东西时,它会从Reader打印到stdout.

我尝试打开两个读者,并且只从两个Reader程序中的一个输出到stdout.每次运行时,Unix选择打印标准输出的读者程序似乎是任意的,但是一旦选择了其中一个程序,每个输出到标准输出都会从同一个Reader程序打印出来.

有谁知道为什么会这样?

如果我有两个WRITER程序,它们都可以写入同一个管道.

asv*_*kau 26

FIF O中的O表示"出局".一旦你的数据"出局",它就消失了.:-)因此,如果另一个进程出现并且其他人已经发出了读取,那么数据就不会有两次.

要完成你的建议你应该看看Unix域套接字.Manpage 在这里.您可以编写一个可以写入客户端进程的服务器,并绑定到文件系统路径.又见socket(),bind(),listen(),accept(),connect(),所有这一切,你会想使用PF_UNIX,AF_UNIXstruct sockaddr_un.


Jul*_*ian 11

Linux tee()可能适合您的需求.
看到这里发球

注意:此功能是特定于Linux的.

  • 我指的是C功能T恤,而不是命令/ ultitily tee.但是,是的,我不确定这个功能是否在其他平台/库上实现. (3认同)
  • `tee` 不是特定于 linux 的 http://www.opengroup.org/onlinepubs/9699919799/utilities/tee.html;但我不确定它是否有助于原始问题中的用例 (2认同)