假设我有这种情况: 我将某些程序的标准错误重定向到文件 output.err 并将标准输出重定向到文件 output.out。当程序运行但在它被允许正常完成之前被杀死时,我注意到 output.err 文件包含预期的输出,但 output.out 是空的,即使我保证执行了适当的 printf 语句。 这是为什么?
最佳答案
这是因为 STDERR 永远不会被缓冲。这意味着无论如何都会立即写入数据。要刷新 STDOUT 中的缓冲数据,您可以使用此函数:
some_write_operation_on_stdout();
fflush(stdout);
此调用导致数据从缓冲区中刷新并写入,就好像它没有被缓冲一样。要永久禁用 STDOUT 缓冲,您只需调用一次:
setbuf(stdout, NULL);
参见 Why does printf not flush after the call unless a newline is in the format string?了解更多信息。
关于c - 标准错误和标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23115799/