我正在尝试使用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计数为“调整”缓冲,如sdtbuf man page中所述?
如果我不能以这种方式使用stdbuf到行缓冲区是否有另一个命令行工具可以实现?
给出示例代码,以下是一些适用于我的选项,并以交互方式运行(输出为伪TTY):
./program | grep ^
./program | while IFS= read -r line; do printf "%s\n" "$line"; done
在几个快速测试中,两者一次输出一条完整的线。如果你需要进一步管道,grep
的--line-buffered
选项应该是有用的。