6、I/O重定向与管道

发布时间 2023-12-10 17:13:18作者: Lathe

一、标准输入、标准输出和标准错误

到目前为止,我们使用过的很多程序生成了不同种类的输出。这些输出通常包含两种类型。一种是程序运行的结果,即该程序生成的数据;另一种是状态和错误信息,表示程序当前的运行情况。比如输入ls命令,屏幕上将显示它的运行结果以及它的相关错误信息。

 

许多程序从一个称为标准输入(standard input,表示为stdin)的设备来得到输入。默认情况下,标准输入连接到键盘。I/O重定向功能可以改变输出内容发送的目的地,也可以改变输入内容的来源地。通常来说,输出内容显示在屏幕上,输入内容来自于键盘。但是使用I/O重定向功能可以改变这一惯例。

a.标准输出重定向

I/O重定向功能可以重新定义标准输出内容发送到哪里。使用重定向操作符“>”后面接文件名,就可以把标准输出重定向到另一个文件中,而不是显示在屏幕上。为什么我们需要这样做呢?它主要用于把命令的输出内容保存到一个文件中。比如,输入date命令会显示当前的时间,如果在date命令后面加“>”,并指向date.txt,那么结果就会写入date.txt文件中。

 

b.标准错误重定向

标准错误的重定向并不能简单地使用一个专用的重定向符来实现。要实现标准错误的重定向,不得不提到它的文件描述符(file descriptor)。每一进程在运行中都会打开一些文件,每一个文件都会有一个指定的数字标识,这个标识就是文件描述符。

在/proc 下随机查看一个进程打开的文件,如下图:

上述两个进程中都有0、1、2这三个文件描述符,这也是绝大多数进程都有的。

  • 0表示标准输入,可以理解为键盘输入;
  • 1表示标准输出,输出到终端;
  • 2表示标准错误,输出到终端;
  • 3及以上为常规文件的描述符。