stdout和stderr重定向

来源:互联网 发布:通话数据统计软件 编辑:程序博客网 时间:2024/05/16 11:40

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)直接在命令行中运行程序

直接运行

(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
这里写图片描述

这里写图片描述

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