标准输入文件(stdin
始终是键盘,标准输出文件stdout
始终是屏幕,标准错误文件stderr
始终是屏幕吗?为什么呢?
默认情况下,是的。但是系统如此灵活和强大的原因是它可以重定向(由用户或程序两者)
当您在外壳中键入时
command > file
您实际上将command
的标准输出重定向到文件file
。
通过做
command1 | command2
您将command1
的标准输出重定向到command2
的 stdin
以编程方式,文件描述符 0 始终是标准输出、1 标准输出、2 标准输出。
我建议了解dup
和dup2
,以便以编程方式重定向它们。
例
int file = open("out.txt", O_APPEND | O_WRONLY);
int stdout_cpy = dup(1); // Clone stdout to a new descriptor
dup2(file, 1); // Make file the new fd 1, i.e. redirect stdout to out.txt