为什么stdbuf行没有缓冲一些简单c程序的输出

问题描述 投票:1回答:1

我正在尝试使用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到行缓冲区是否有另一个命令行工具可以实现?

c bash shell io buffering
1个回答
1
投票

给出示例代码,以下是一些适用于我的选项,并以交互方式运行(输出为伪TTY):

./program | grep ^
./program | while IFS= read -r line; do printf "%s\n" "$line"; done

在几个快速测试中,两者一次输出一条完整的线。如果你需要进一步管道,grep--line-buffered选项应该是有用的。

© www.soinside.com 2019 - 2024. All rights reserved.