我正在阅读《UNIX网络编程:套接字API》这本书,并且在示例代码中,他们有一个包含以下行的错误处理函数:
fflush(stdout); /* in case stdout and stderr are the same */
fputs(buf, stderr);
fflush(stderr);
buf包含错误描述。我不理解为什么在第一行要在stdout上使用fflush,以及为什么注释解释了它的用途。
#include <stdio.h>
int main() {
fprintf(stdout, "This is to stdout. ");
fprintf(stderr, "This is to stderr. ");
fprintf(stdout, "This is also to stdout. ");
}
你会期望输出结果是:
This is to stdout. This is to stderr. This is also to stdout.
$ ./test
This is to stderr. This is to stdout. This is also to stdout.
#include <stdio.h>
#include <unistd.h>
int main() {
fprintf(stdout, "This is to stdout. ");
fflush(stdout);
fprintf(stderr, "This is to stderr. ");
fprintf(stdout, "This is also to stdout. ");
}
$ ./test
This is to stdout. This is to stderr. This is also to stdout.
This is also to stdout.
和This is to stdout.
应该交换。 - Qix - MONICA WAS MISTREATEDstderr
不寻常地是_line_缓冲的,那么类似的问题会发生,而这个答案无法解决。严谨地说,在写入之前刷新另一个。或者使用良好的礼仪,在完成后[刷新一次]。 - chux - Reinstate Monica