Linux下stdin,stdout和stderr理解

 

先看代码实例

文件名为main2.c

#include <stdio.h>
int main()
{
    printf("input the int value i:\n");
    int i,j;
    scanf("%d",&i);
    fscanf("%d",&i);
    printf("input the int value j:\n");
    scanf("%d",&j);
    if(0 != j){
	 fprintf(stdout,"%d/%d=%d\n",i,j,i/j);
     //printf("%d/%d=%d\n",i,j,i/j);
    }else{
	 //printf("j!=000\n");
	 //fprintf(stdout,"j!=00\n");
         fprintf(stderr,"j!=0\n");
         return 1;
    }
    return 0;
}

(stdio)标准输入

在c语言中表现为调用scanf函数接受用户输入内容,即从终端设备输入内容。也可以用fscanf指明stdin接收内容。 标准输入的文件标识符为0。

先编译我们的文件
cc main2.c -o m2.out
直接执行
./m2.out
输入9和3,结果为:

input the int value i:
9
input the int value j:
3
9/3=3

新建一个input.txt文件,文件内容为:
10
2
然后在命令行执行
./m2.out < input.txt
结果为:

input the int value i:
input the int value j:
10/2=5

(stdout)标准输出

在c语言中表现为调用printf函数将内容输出到终端上。使用fprintf也可以把内容输出到终端上。标准输出的文件标识符为1

执行命令
./m2.out > out.txt
输入8和2
结果为

input the int value i:
input the int value j:
8/2=4


(stderr)标准

标准错误和标准输出一样都是输出到终端上, 标准错误输出的文件标识符为2。从语义上分析:在程序处理的时候,正常的信息输出作为标准输出,产生错误的输出作为标准错误输出。这样在重定向的时候,就可以将正常的信息和错误的信息重定向到不同的文件。

执行命令
./m2.out 2 > false.txt 
我们输入一个错误的除法8和0
input the int value i:
8
input the int value j:
0
查看false.txt文件
cat false.txt
结果为:
j!=0

——————————————注释来自https://blog.csdn.net/xmzzy2012/article/details/80584910,侵删