为什么stdbuf行不缓冲一些简单的c程序的输出
Why doesn't stdbuf line buffer the output of some simple c programs
我正在尝试使用 stdbuf 来行缓冲程序的输出,但我似乎无法使其按预期工作。使用此代码:
#include <stdio.h>
#include <unistd.h>
int main (void)
{
int i=0;
for(i=0; i<10; i++)
{
printf("This is part one");
fflush(stdout);
sleep(1);
printf(" and this is part two\n");
}
return 0;
}
我看到了This is part one
,等一秒然后and this is part two\nThis is part one
。
我预计 运行 它是
stdbuf --output=L ./test.out
会导致输出延迟 1 秒,然后 This is part one and this is part two\n
以一秒的间隔重复。相反,我看到的输出与我不使用 stdbuf 时的输出相同。
我是否错误地使用了 stdbuf 或对 fflush 的调用算作 "adjusting" sdtbuf man page 中描述的缓冲?
如果我不能以这种方式使用 stdbuf 来排列缓冲区,是否有另一个命令行工具可以实现?
这里有几个对我有用的选项,给定示例代码,运行 交互(输出到伪 TTY):
./program | grep ^
./program | while IFS= read -r line; do printf "%s\n" "$line"; done
在几个快速测试中,两者都一次输出完整的一行。如果您需要进一步管道化,grep
的 --line-buffered
选项应该很有用。
我正在尝试使用 stdbuf 来行缓冲程序的输出,但我似乎无法使其按预期工作。使用此代码:
#include <stdio.h>
#include <unistd.h>
int main (void)
{
int i=0;
for(i=0; i<10; i++)
{
printf("This is part one");
fflush(stdout);
sleep(1);
printf(" and this is part two\n");
}
return 0;
}
我看到了This is part one
,等一秒然后and this is part two\nThis is part one
。
我预计 运行 它是
stdbuf --output=L ./test.out
会导致输出延迟 1 秒,然后 This is part one and this is part two\n
以一秒的间隔重复。相反,我看到的输出与我不使用 stdbuf 时的输出相同。
我是否错误地使用了 stdbuf 或对 fflush 的调用算作 "adjusting" sdtbuf man page 中描述的缓冲?
如果我不能以这种方式使用 stdbuf 来排列缓冲区,是否有另一个命令行工具可以实现?
这里有几个对我有用的选项,给定示例代码,运行 交互(输出到伪 TTY):
./program | grep ^
./program | while IFS= read -r line; do printf "%s\n" "$line"; done
在几个快速测试中,两者都一次输出完整的一行。如果您需要进一步管道化,grep
的 --line-buffered
选项应该很有用。