有一个服务将其输出通过管道传输到我用来创建的命名管道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 选项。