c - 标准错误和标准输出

标签 c error-handling

假设我有这种情况: 我将某些程序的标准错误重定向到文件 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/

相关文章:

c - 读取c中的输入后如何清除缓冲区?

php - 如何使用PHP中的严格报告管理错误?

com - 如何从 ATL activex 控件向 VB6 返回错误字符串和错误代码?

c - 在 c 中对 execvp() 的用户输入进行标记

c - 为什么 GCC 以不同方式存储全局和静态 int?

ruby-on-rails - Rails和Devise杀死了其他地方的验证错误

scala - 通过任一/析取 Scala 处理多种错误类型

dataframe - 在pyspark中的数据帧上应用udf后出现错误

c - 为什么删除 "int"关键字不会在以下代码中产生任何错误

c - 如何让多维数组更不容易导致精神错乱?