说我有两个命令:foo和bar。
我想执行这两个操作,使得foo的输出被“重定向”到bar的输入。不仅如此,我还希望写入foo输出流的每个字节都能直接/立即写入bar的输入流。
如果我使用命令:
foo | bar
然后foo必须在bar开始读取其输入流之前终止/退出。我希望bar在foo写入其输出流的同时开始读取其输入流。
This在这里回答,如果我理解正确,说明管道缓冲的字节数有限制,当它们被填充时,管道被“刷新”到bar的输入流中不知怎的,这个限制可以减少到'1'?
答案 0 :(得分:6)
您写道:
在foo
开始读取其输入流之前,
bar
必须终止/退出。我希望bar
在foo
写入其输出流的同时开始读取其输入流。
假设不正确。 foo
在输出传递给bar
之前不需要终止。确实是glibc(假设foo
和bar
都链接到它)执行输出缓冲。除非foo
的输出发送到终端,否则输出将被写入缓冲区,并且当缓冲区达到特定大小时会刷新该缓冲区。如果foo
的输出太小而无法达到缓冲区大小,那么是的,一旦foo
退出,缓冲区将被刷新。
您可以使用stdbuf
命令调整缓冲区大小。以下命令不会缓冲foo
的输出:
stdbuf -o0 foo | bar