stdin stdout stderr重定向

1.
每当运行一个新程序时,所有的shell都为其打开3个文件描述符。即标准输入(standard input),标准输出(standard output),标准出错(standard err).
如果不做特殊处理,则这三个描述符都链接向终端。(键盘输入(到终端),显示器(终端)输出)。
(每个进程生来就有三个文件描述符绑定在它们身上。分别指向标准输入、标准输出和标准错误。)
2.测试源码 main.c

#include <stdio.h>
#include <unistd.h>

int main()
{
    int i=0;    
    scanf("%d",&i); //stdin
    printf("stdout: i = %d\n",i); //stdout
    //printf("%d %d %d \n",STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO); //0 1 2
    perror("stderr: test"); //stderr
}

gcc -o main main.c
3.
1.默认的输出,不重定向
./main
123
stdout: i = 123
stderr: test: Success
2. 只有stdin(0)重定向(文件输入)
./main 0< in.txt
stdout: i = 688
stderr: test: Success
3. 只有stdout(1)重定向
./main 1> out.txt 或者直接 ./main > out.txt
123
stderr: test: Success
4. 只有stderr(2)重定向
./main 2> out.txt
123
stdout: i = 123
5. stdout,stderr都重定向输出(分别输出)
./main 1>out.txt 2>err.txt
123
6.stdout,stderr都重定向输出(都输出到同一文件)
./main > out.txt 2>&1
(./main > out.txt 是标准输出重定向到out.txt,而2>&1则表示标准错误重定向到标准输出,也输出到out.txt.)

7./main <in.txt >out.txt
stderr: test: Success
8 stdin,stdout,stderr都重定向
hn@ubuntu:~/Desktop/test$ ./main <in.txt >out.txt 2>&1
9 无输出
hn@ubuntu:~/Desktop/test$ ./main > /dev/zero 2>&1
123
10 无输出
hn@ubuntu:~/Desktop/test$ ./main > /dev/null 2>&1
123

这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/a379039233/article/details/79651322