每个进程都会默认打开3个文件描述符,即0、1、2。其中0代表标准输入流、1代表标准输出流、2代表标准错误流。通常标准输入流对应着键盘的设备文件、标准输出流和错误流对应着显示器的设备文件。在编程中通常使用宏STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO分别来代表0,1,2。
要注意一点:
0、1、2这三个文件描述符对应的是标准输入流、标准输出流和标准错误流而不是键盘设备文件和显示器设备文件。只是默认标准输入流对应着键盘设备文件,标准输出和错误对应着显示器设备文件。
而一些C库提供的标准IO函数,这些函数操作的是文件描述符,是标准输入流、输出流或者错误流,而不是键盘的设备文件和显示器的设备文件。如果改变了标准输出流和显示器设备文件之间的对应关系,那么可能结果就不会在显示器上。这种情况出现在命令行中使用重定向符号的时候,标准输入、标准输出和标准错误对应的就不是键盘设备文件和显示器设备文件,而是指定的某个普通的文件。
https://www.cnblogs.com/frank-yxs/p/5925568.html