stdout和stderr重定向

时间:2022-05-25 21:02:11

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 0;
}

(1)直接在命令行中运行程序

stdout和stderr重定向

(2)重定向到文件
命令:stdouterr > result.txt
stdout和stderr重定向

stdout和stderr重定向

可以看到只有stdout被重定向到文件了

(3)将标准输出重定向到文件
命令:stdouterr 1> result1.txt
stdout和stderr重定向

stdout和stderr重定向

可以看到只有stdout被重定向到文件了

(4)将标准错误重定向到文件
命令:stdouterr 2> result2.txt
stdout和stderr重定向

stdout和stderr重定向

可以看到输出到stderr的内容也是可以被重定向到文件的

(5)将标准输出和标准错误重定向到同一文件
命令:stdouterr > result3.txt 2>&1
stdout和stderr重定向

stdout和stderr重定向

标准输出和标准错误被重定向到同一文件

(6)将标准输出和标准错误重定向到不同文件
命令:stdouterr 1> result3a.txt 2> result3b.txt
stdout和stderr重定向

stdout和stderr重定向

标准输出和标准错误被重定向到不同文件