#include <stdio.h> extern FILE *stdin; extern FILE *stdout; extern FILE *stderr;
STDIN_FILENO(0),STDOUT_FILENO(1),STDERR_FILENO(2)
。FILE
是库对文件描述符的封装,子进程可以继承文件描述符,但不继承文件句柄。stdin,stdout,stderr
用宏来实现的,对它们直接赋值不具有可移植性,标准做法是通过freopen(3)
来重新打开。控制终端 controlling terminal
/dev/tty 是一个进程的控制终端
nohup
shell重定向
ls > dirlist 2>&1
会将标准输出和标准错误都重定向到文件 "dirlist" 中, ls 2>&1 > dirlist
只会将标准输出重定向到文件中。>&- 或 <&-
之前有变量,表示的是要关闭的文件描述符<
符号之前表示省略标准输入,>
符号之前表示省略标准输出。[n]<word
,在文件描述符n上打开word
表示的文件来读取。没有n,表示打开到标准输入[n]>word
,在文件描述符n上打开word
表示的文件来写入。没有n,表示打开标准输出到文件 word
[n]>>word
&>word
, 或者 >&word
,推荐前一个,跟 >word 2>&1
的作用一样&>>word
, 跟 >>word 2>&1
的作用一样[n]<&word
,复制输入文件描述符,在文件描述符 n
上复制文件word
。如果 word
是 -
,表示要关闭 n。 [n]>&word
表示在文件描述符n
上复制输出文件word
。比如2>&1
表示关闭2,并将1复制到2上,复制的意思是,2跟1一样,现在都指向1对应的标准输出。不管是输入还是输出,最终目标都指向后一个文件。比如 2>&1
,最后都指向1,表示2也指向1,程序对2的输出,也输出到1。[n]<&digit-
,表示移动digit到文件描述符n。移动后,digit文件会被关闭,n表示之前打开的文件。[n]>digit-
也一样[n]<>word
,用描述符n打开文件来读写,省略n表示用标准输入。<< delimiter \n document \n delimite
参考: