段7.9.13/7的c99规定:
在程序启动时,预定义了三个文本流,无需明确打开 - 标准输入(用于读取传统输入),标准输出(用于写入常规输出)和标准错误(用于写入诊断输出).
最初打开时,标准错误流未完全缓冲; 当且仅当可以确定流不参考交互设备时,标准输入和标准输出流被完全缓冲.
这是有道理的.如果您将标准输出推送到文件,则需要将其完全缓冲以提高效率.
但是,当你无法确定设备是非交互式的(即正常输出到终端)时,我在标准中没有提到输出是线路缓冲还是无缓冲.
我问的原因是我在这里回答我应该fflush(stdout);在两个陈述之间插入一个:
printf ("Enter number> ");
// fflush (stdout); needed ?
if (fgets (buff, sizeof(buff), stdin) == NULL) { ... }
Run Code Online (Sandbox Code Playgroud)
因为我没有printf用换行符终止.任何人都可以清除这个吗?
我有一个封闭的源程序,打印输出到标准输出.我需要解析输出.所以我使用dup2将输出重定向到fifo(我可以在父进程中读取,分叉和执行二进制文件),然后执行程序.问题是文件中的fprintf调用变为缓冲,因为它现在正在写入文件.
我试着在调用exec之前在stdout上用_IONBF调用setvbuf.但问题仍然存在.
为什么setvbuf在我的情况下没有帮助?
我如何强制输出刷新?