重定向即替换数据流
标准输入/输出/错误在描述符表中的位置是固定的,但它们指向的数据流可以改变。
所有向标准输出发送数据的函数会先查看描述符表,看1号描述符指向哪条数据流,然后再把数据写到这条数据流中,printf()
便是如此。
进程可以重定向自己
到目前为止,你只在命令行中用“>”和“<”运算符重定向过程序,但只要修改描述符表,进程也能重定向它们自己。
百宝箱
难怪要用“2>”
你可以在命令行用“>”运算符重定向标准输出,用“2>”重定向标准错误:
- ./myprog > output.txt 2> errors.log
现在,知道为什么标准错误要用“
2>
”来重定向了吧,因为2
是标准错误在描述符表中的编号。在很多操作系统中,也可以用“1>
”来重定向标准输出。而在类Unix操作系统中,可以用以下命令把标准错误和标准输出重定向到一个地方:
![]()