名称 | 代码 | linux下文件描述符 |
---|---|---|
标准输入(stdin) | 0 | /dev/stdin |
标准输出(stdout) | 1 | /dev/stdout |
标准错误输出(stderr) | 2 | /dev/stderr |
当执行一个进程时,操作系统会默认打开这三个文件描述符。
测试如下:
#include <stdio.h>
#include <iostream>
#include <unistd.h>
using namespace std;
int main(int argc, char* argv[])
{
printf("111\n");
fprintf(stderr,"222\n");
cout<<"333"<<endl;
cerr<<"444"<<endl;
clog<<"555"<<endl;
for(int i=0;i<3;i++){
close(i);
}
int i=0;
cin>>i;
printf("___111,%d\n",i);
fprintf(stderr,"___222\n");
cout<<"___333"<<endl;
cerr<<"___444"<<endl;
clog<<"___555"<<endl;
return 0;
}
以上代码,输出:
111
222
333
444
555
因为我们通过 close(); 将0,1,2文件都关闭了,后续的标准输入,标准输出,标准错误都不会有作用。
当我们将close(i) 那一行注释后,stdin,stdout,stderr就会正常输入和输出。