命令行工具一次监听几个FIFO

时间:2011-07-28 06:57:56

标签: unix select fifo file-descriptor cat

我正在寻找一种工具来同时读取几个FIFO(可能使用select(2))并输出读取的内容,在所有FIFO关闭时关闭流。更准确地说,program的行为如下:

$ mkfifo a b
$ program a b > c &
$ echo 'A' > a
$ echo 'B' > b
[1]  + done       program a b > c
$ cat c
A
B
$ program a b > c &
$ echo 'B' > b
$ echo 'A' > a
[1]  + done       program a b > c
$ cat c
B
A

我的第一次尝试是使用cat,但第二个示例不起作用(echo 'B' > b将挂起),因为cat按顺序从每个参数读取,而不是同时读取。在这种情况下使用的正确工具是什么?

1 个答案:

答案 0 :(得分:0)

尾巴会这样做。

使用:

tail -q -n +1 a b

编辑:抱歉,这不起作用。我会看看能不能找到别的东西。

抱歉,我找不到任何东西。

如果您不想自己编程,那么我的建议就是多个命令:

#!/bin/sh
rm c
cat a >> c &
cat b >> c &
wait

你可能会得到一些交错,但否则一切都应该正常。等待是为了防止程序退出,直到完成所有cat程序(以防万一你需要在完成所有操作后运行某些命令)。并且rm是为了确保c开始为空,因为cat命令附加到文件。