即使没有读者,如何继续在 FIFO 中写入

即使没有读者,如何继续在 FIFO 中写入

有一个服务将其输出通过管道传输到我用来创建的命名管道mkfifo name

如果管道中没有读取器,服务就会暂停。如何让它在没有读取器的情况下继续管道传输数据?

读者稍后可能会(也可能不会)使用管道。

编辑:不需要缓冲区。读者将从他们使用管道的地方开始读取。在此之前的数据会丢失。没关系。假设它是一个视频流。

答案1

tail -F namedpipe

在这种情况下可能会让您感兴趣...它应该始终保持管道开放并可为您的服务进行写入。

如果需要,您也可以丢弃其输出,通过将其重定向到例如/dev/null如下方式来最大限度地减少使用的资源:

tail -F namedpipe > /dev/null

答案2

使用socat尽快从套接字中提取数据,将其放入文件中,然后在另一个socat中将其读取到另一个套接字中:

$ socat gopen:socket1 create:file1 
$ mkfifo socket2
$ socat gopen:file1 gopen:socket2

您可以使用多个 socat 选项。

相关内容