stdout和stderr的重定向
C语言中对应于显示器的指针有两个:stdout和stderr。
书上说,对于前者,信息输出时总是先送入缓冲区(行间缓存),然后再输出到屏幕;而对后者,信息是不经过缓冲区直接输入到屏幕的。因此,向stdout输出的信息是可以被重定向的,输出到stderr的信息则不能被重定向。
但是我认为输出到stderr的信息也是可以被重定向的。下面举例说明:
#include <stdio.h>
int main(void)
{
fprintf(stdout, "This is stdout\n");
fprintf(stderr, "This is stderr\n");
return ;
}
(1)直接在命令行中运行程序
(2)重定向到文件
命令:
stdouterr > result.txt
可以看到只有stdout被重定向到文件了
(3)将标准输出重定向到文件
命令:
stdouterr 1> result1.txt
可以看到只有stdout被重定向到文件了
(4)将标准错误重定向到文件
命令:
stdouterr 2> result2.txt
可以看到输出到stderr的内容也是可以被重定向到文件的
(5)将标准输出和标准错误重定向到同一文件
命令:
stdouterr > result3.txt 2>&1
标准输出和标准错误被重定向到同一文件
(6)将标准输出和标准错误重定向到不同文件
命令:
stdouterr 1> result3a.txt 2> result3b.txt
标准输出和标准错误被重定向到不同文件