重定向笔记

首先注意文件描述符、三个数字0,1,2和文件指针的关系。
运行任何程序之前,都会首先打开三个文件:一个用于输入,一个用于输出,一个用于错误输出,这三个文件打开后形成的文件结构分别用文件指针stdin,stdout,stderr进行指向。这样会形成三个文件描述符0,1,2。具体哪个是0,哪个是1,哪个是2,那要根据打开顺序。一般是按照“标准输入-标准输出-标准错误”这个顺序来打开的,所以我们常说标准输入就是文件描述符0,输出是1,错误是2,为了增强可移植性,linux的unistd.h中对这三个描述符进行了宏定义,所以有STDIN_FILENO - 0, STDOUT_FILENO - 1, STDERR_FILENO - 2。

stdio.h中有指针定义:
    141 /* Standard streams.  */
    142 extern struct _IO_FILE *stdin;      /* Standard input stream.  */
    143 extern struct _IO_FILE *stdout;     /* Standard output stream.  */
    144 extern struct _IO_FILE *stderr;     /* Standard error output stream.  */
    145 #ifdef __STDC__
    146 /* C89/C99 say they're macros.  Make them happy.  */
    147 #define stdin stdin
    148 #define stdout stdout
    149 #define stderr stderr
    150 #endif

unistd.h中有如下宏定义:
    180 /* Standard file descriptors.  */
    181 #define STDIN_FILENO    0   /* Standard input.  */
    182 #define STDOUT_FILENO   1   /* Standard output.  */
    183 #define STDERR_FILENO   2   /* Standard error output.  */




重定向最常用的两个:“>”,“<”,分别为输出重定向和输入重定向。
进阶一步:追加的输出重定向:“>>”。
思考上述重定向工作:输出重定向就是以只写方式打开文件,将标准输出stdout(文件描述符1)写入该文件,注意,标准错误信息stderror(2)不会写入该文件。
输入重定向则是只读方式打开并读取文件到标准输入stdin(0)

猜你喜欢

转载自canlynet.iteye.com/blog/905715