我对这三个文件的用途感到很困惑。如果我的理解正确的话,stdin 是程序写入其在进程中运行任务的请求的文件,stdout 是...
我对这三个文件的用途感到困惑。如果我的理解正确,它们 stdin
是程序写入其在进程中运行任务的请求的文件、 stdout
内核写入其输出以及请求它的进程从中访问信息的文件、以及 stderr
所有异常都输入到的文件。打开这些文件以检查这些是否确实发生,我发现似乎没有任何迹象表明如此!
我想知道的是这些文件到底有什么用途,用很少的技术术语来给出绝对简化的答案!
标准输入|STDIN - 这是 您的进程读取以从您那里获取信息的 文件句柄
标准输出|STDOUT – 您的进程将常规输出写入此文件句柄。
标准错误|STDERR – 您的进程将诊断输出写入此文件句柄。
这大概是我能做到的最简化的了 :-)
当然,这主要是惯例。如果您愿意,没有什么可以阻止您将诊断信息写入标准输出。您甚至可以完全关闭这三个文件句柄并打开自己的文件进行 I/O。
当您的进程启动时,它应该已经打开这些句柄,并且它可以读取和/或写入它们。
默认情况下,它们可能连接到您的终端设备(例如 /dev/tty
),但 shell 将允许您在进程启动之前建立这些句柄与特定文件和/或设备(甚至是到其他进程的管道)之间的连接(一些可能的操作相当巧妙)。
例如:
my_prog <inputfile 2>errorfile | grep XYZ
其将:
my_prog
.
inputfile
打开
errorfile
打开
grep
.
my_prog
到 的标准输入 grep
.
回复您的评论:
当我在 /dev 文件夹中打开这些文件时,怎么就看不到正在运行的进程的输出呢?
这是因为它们不是普通文件。虽然 UNIX 将 所有内容 为文件系统中的某个文件,但这并不意味着最低级别也是如此。 /dev
层次结构中的大多数文件都是字符设备或块设备,实际上是设备驱动程序。它们没有大小,但有主设备号和次设备号。
当您打开它们时,您连接到的是设备驱动程序而不是物理文件,并且设备驱动程序足够智能,知道应该单独处理单独的进程。
Linux 文件系统也是如此 /proc
。它们不是真正的文件,只是严格控制的内核信息网关。