Kau*_*eya 0 c c++ stdout stderr
我的程序中有这个代码
while(1){
// some code here
fprintf(stdout,"Output Log");
fprintf(stderr,"Error Log");
//some code here
}
Run Code Online (Sandbox Code Playgroud)
它只打印"错误日志".看起来我错过了两个fprintf之间的冲洗.因此我将"\n"附加到字符串"输出日志".工作得很好.但当我换掉两个fprintf时,无法理解这种奇怪的行为
while(1){
// some code here
fprintf(stderr,"Error Log\n");
fprintf(stdout,"Output Log");
//some code here
}
Run Code Online (Sandbox Code Playgroud)
尽管使用"\n"它只打印"错误日志".
你的错误是假设两条消息"之间"的换行符导致两者都出现.它实际上是输出结尾处的换行符stdout导致消息stdout出现(消息stderr始终可见,因为它stderr是无缓冲的).
在任何情况下,除非你手动设置行缓冲模式,否则依赖换行刷新缓冲区是不可靠的stdout.line-buffered只是stdout终端时的默认值.如果你不希望强制行缓冲或无缓冲模式,那么你必须使用fflush 得到输出的可靠交织以stdout和stderr.
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |