我对这三个文件的目的感到困惑。如果我的理解是正确的,则stdin
是程序在其中写入其在进程中运行任务的请求的文件,stdout
是内核在其中写入其输出以及请求其从中访问信息的进程的文件,stderr
是输入所有异常的文件。打开这些文件以检查它们是否确实发生时,我发现似乎没有任何暗示!
我想知道的是这些文件的用途到底是什么,用很少的技术术语就可以完全肯定答案!
最佳答案
标准输入-这是您的进程读取以获取您的信息的文件句柄。
标准输出-您的进程将常规输出写入此文件句柄。
标准错误-您的进程将诊断输出写入此文件句柄。
这就是我所能做到的愚蠢:-)
当然,这主要是按照惯例。如果您愿意,没有什么可以阻止您将诊断信息写入标准输出的。您甚至可以完全关闭三个文件句柄,并打开自己的I/O文件。
当您的进程开始时,它应该已经打开了这些句柄,并且可以对其进行读取和/或写入。
默认情况下,它们可能已连接到您的终端设备(例如/dev/tty
),但是 shell 程序将允许您在进程开始之前(某些进程)在这些句柄与特定文件和/或设备(甚至到其他进程的管道)之间建立连接。可能的操作相当聪明)。
一个例子是:
my_prog <inputfile 2>errorfile | grep XYZ
这将:my_prog
创建一个进程。 inputfile
作为您的标准输入(文件句柄0)。 errorfile
作为您的标准错误(文件句柄2)。 grep
创建另一个过程。 my_prog
的标准输出附加到grep
的标准输入。 发表您的评论:
这是因为它们不是普通文件。尽管UNIX将所有内容都以文件形式显示在文件系统中的某个位置,但在最低级别却并非如此。
/dev
层次结构中的大多数文件是字符设备或块设备,实际上是设备驱动程序。它们没有大小,但是具有主设备号和次设备号。打开它们时,您连接的是设备驱动程序,而不是物理文件,并且设备驱动程序足够聪明,可以知道应该单独处理单独的进程。
Linux
/proc
文件系统也是如此。这些不是真实的文件,只是对内核信息进行严格控制的网关。关于linux - 对stdin,stdout和stderr感到困惑?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3385201/