0

我正在寻找一种工具来一次读取多个 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按顺序读取每个参数,而不是同时读取。在这种情况下使用的正确工具是什么?

4

1 回答 1

0

尾巴会这样做。

利用:

tail -q -n +1 a b

编辑:对不起,没有奏效。我看看能不能找到别的东西。

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

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

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

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

于 2011-07-28T07:10:37.650 回答