我有这种简单的代码和平:
#include <stdio.h>
int main()
{
fprintf(stdout , "stdout \n");
fprintf(stderr , "stduerr \n");
return 0;
}
Output:
stdout
stderr
我知道stdout是缓冲的,stderr不是,并知道一个新的冲洗线
Windows和netbeans上的结果是:
stdout
stderr
使用mac和Eclipse的结果:
stderr
stdout
并想知道原因......
非常感谢...
答案 0 :(得分:1)
stdout
默认情况下(在您的系统上)是行缓冲的,这意味着它会在您刷新它时刷新,或者当您放置一个换行符时\#39; \ n&#39;在其中,你在这里做:
fprintf(stdout , "stdout \n");
关于缓冲stdout的更多信息:
如果已知stdout不引用交互设备,则表示流 是完全缓冲的。否则,它是依赖于库的 stream默认为行缓冲或不缓冲(请参阅setvbuf)。
答案 1 :(得分:0)
With stdio(3)
output streams that refer to terminal devices are line buffered like stdout
, while stderr
is not buffered.
The program above exits immediately after fprintf, so stdout
is flushed then.
If you want to see the differences in behavior, redirect the stdout and stderr to a file, and add a few more fprintf
lines.
答案 2 :(得分:0)
正如其他人已经注意到的那样,如果您使用
,您将获得预期的结果fprintf(stdout, "STDOUT");
fprintf(stderr, "STDERR");
这是因为默认的Linux终端stdout是行缓冲的,而stderr没有缓冲。
您需要刷新标准输出或手动打印&#39; \ n&#39;在打印到stderr之前stdout。然后你会在stderr消息之前看到它。
请注意,也可以关闭stdout的缓冲。