如何缓冲stdout直到stdin关闭?

时间:2010-10-25 23:18:58

标签: c

我自己熟悉C编程,并希望编写类似于expand的程序。命令行工具首先读取stdin的每个输入,对其进行处理并将完整结果写入stdout。我怎样才能以优雅的方式实现这一目标?

目前我的代码看起来像这样。这在处理文件时非常有效,但显然当用户输入每个换行符后inputstdin时,他会立即获得输入行的结果。

char buffer[1024];
while (fgets(&buffer[0], sizeof(buffer) / sizeof(char), input) != NULL)
{
    /* do something */
    printf("output");
}

最诚挚的问候,
Oliver Hanappi

2 个答案:

答案 0 :(得分:1)

将所有输出写入临时文件而不是stdout,然后在程序执行结束时从此临时文件复制到stdout

答案 1 :(得分:0)

那么,是什么让你认为stdin将永远关闭? :)

您可以使用isatty(STDIN_FILENO)来确定stdin是否与用户输入相关联。 (如果是,则函数返回非零。)如果是这种情况,则可以相应地改变行为。