stdout 与 stderr 区别
stdout 与 stderr 区别
-
stdout 主要处理使用者输出
-
stderr 主要处理错误信息输出
-
在默认情况下,stdout是行缓冲的,输出会放在一个buffer里面,只有到换行的时候才会输出到屏幕;
而stderr是无缓冲的,会直接输出。
-
stdout 可以将输出重定向到某个文件上;
stderr 不能将输出重定向,只能输出到控制台中。
重定向问题
#include <stdio.h>
int main() {
fprintf(stdout, "from stdout\n");
fprintf(stderr, "from stderr\n");
return 0;
}
执行命令 gcc test.c -o test
编译生成 test.exe
文件后,执行命令行 test.exe > out.txt
,此时,控制台输出 from stderr
, out.txt 文件中的内容为 from stdout
。
缓冲问题
#include <stdio.h>
int main() {
fprintf(stdout, "from stdout ");
fprintf(stderr, "from stderr ");
puts("");
return 0;
}
执行命令 gcc test.c -o test
编译生成 test.exe
文件后,执行命令行 ./test
,此时控制台输出 from stderr from stdout
。
若将上述代码 \(4、5\) 行修改为如下:
fprintf(stdout, "from stdout\n");
fprintf(stderr, "from stderr\n");
则控制台输出为
from stdout
from stderr