对于内核而言,所有打开的文件都是通过文件描述符引用。文件描述符是一个非负整数,当进程打开或创建一个文件时,内核向进程返回一个文件描述符。当读写文件时,文件描述作为一个标志,标识该文件(如系统调用read和write函数)。
UNIX系统shell把文件描述符0与进程的标准输入相关联,把文件描述符1与进程的标准输出相关联,把文件描述符2与进程的标准错误关联。这些描述符被宏定义为符号常量。在/usr/include/unistd.h中可以查找到宏定义,如下:
/* Standard file descriptors. */
#define STDIN_FILENO 0 /* Standard input. */
#define STDOUT_FILENO 1 /* Standard output. */
#define STDERR_FILENO 2 /* Standard error output. */
有时候我们也许会看STDIN,STDOUT,STDERR。这些和上述所说的引用相同,但这些是由C标准库stdio.h提供的,而上述的是系统调用函数库unistd.h提供的。一般Linux命令行的输入输出(就是键盘输入,终端显示)是由系统调用实现的。
数据流重定向是将某个命令执行后,将结果显示在屏幕的数据传输到其他地方,将由键盘输入的数据,替代为从某个文件读入数据。
执行一个命令,通常它是按如下方式进行:
当执行一个命令时,命令从文件有标准输入读取,经过处理,若命令执行所回传正确的信息,由标准输出显示到终端。若命令执行失败,回传的错误信息由标准错误输出到终端。
Standard Output,Standard Error
我们不能将错误和正确的信息都传送到屏幕,因此采用数据流输出重定向功能,可以将标准输出,标准错误分别传送到不同的文件和设备中。重定向采用的符号如下:
1、 标准输入(STDIN_FILEN