我对这三个文件的目的感到困惑。如果我的理解是正确的,则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/

    10-11 19:41