加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 如何避免回声关闭FIFO命名管道? – Unix FIFO的有趣行

发布时间:2020-12-15 09:22:05 所属栏目:安全 来源:网络整理
导读:我想要输出一些数据到管道,让另一个进程对数据逐行做一些事情。这里是一个玩具示例: mkfifo pipecat pipecat pipe 现在我可以输入任何我想要的,然后按enter键我立即看到同一行。但是如果用echo替换第二个管道: mkfifo pipecat pipeecho "some data" pipe
我想要输出一些数据到管道,让另一个进程对数据逐行做一些事情。这里是一个玩具示例:
mkfifo pipe
cat pipe&
cat >pipe

现在我可以输入任何我想要的,然后按enter键我立即看到同一行。但是如果用echo替换第二个管道:

mkfifo pipe
cat pipe&
echo "some data" >pipe

管道在回声和猫管道之间关闭。完成,使我不能通过管道传递任何更多的数据。有没有办法避免关闭管道和接收数据的进程,以便我可以通过管道从bash脚本传递许多行数据,并在他们到达时处理它们?

当FIFO被打开用于读取时,它阻塞调用进程(通常)。当进程打开FIFO进行写入时,读取器被解锁。当写入器关闭FIFO时,读取进程获得EOF(读取0个字节),除了关闭FIFO并重新打开之外,没有什么可以做的事情。因此,你需要使用一个循环:
mkfifo pipe
(while cat pipe; do : Nothing; done &)
echo "some data" > pipe
echo "more data" > pipe

另一种方法是在FIFO打开时保持一些进程。

mkfifo pipe
sleep 10000 > pipe &
cat pipe &
echo "some data" > pipe
echo "more data" > pipe

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读