目录

stdout和stderr的区别

概述

下文主要讲解一下 stdout 和 stderr 的区别。

stdout和stderr的区别

如下一个小例子:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
int main(void) {

    char * err1 = "你遇到的错误信息是只能输出到屏幕上显示,不能被系统重定向到文件中";
    
    char * err2 = "您遇到的错误信息可以输出到屏幕上显示, 也可以被系统重定向到文件中存储";
    
    fprintf(stderr, err1);
    
    fprintf(stdout, err2);
    
    return 0;
}

编译运行这个小例子,可以看到在控制台输出了两行文字,看不出有什么区别,假如上面的小例子生成的可执行文件名为1.exe,然后在控制台使用系统的重定向功能命令:

1
1.exe > 1.txt

执行这个命令之后,在控制台可以看见 err1 字符串被打印出来,在1.txt文件中可以看到 err2 字符串。

一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:

  1. 标准输入文件(stdin): stdin的文件描述符为0,Unix程序默认从stdin读取数据
  2. 标准输出文件(stdout): stdout的文件描述符为1,Unix程序默认向stdout输出数据
  3. 标准错误文件(stderr): stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息

参考资料

  1. stderr和stdout的区别
  2. Shell输入/输出重定向
警告
本文最后更新于 2017年2月1日,文中内容可能已过时,请谨慎参考。