我对这三个文件的用途感到很困惑。如果我的理解是正确的,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
的标准输入。你的评论:
When I open these files in /dev folder, how come I never get to see the output of a process running?
这是因为它们不是普通文件。虽然 UNIX 将 everything 呈现为文件系统中某处的文件,但在最低级别并没有做到这一点。 /dev
层次结构中的大多数文件是字符设备或 block 设备,实际上是设备驱动程序。它们没有大小,但有主要和次要设备号。
当您打开它们时,您将连接到设备驱动程序而不是物理文件,并且设备驱动程序足够智能,知道应该单独处理单独的进程。
Linux /proc
文件系统也是如此。这些不是真正的文件,只是内核信息受到严格控制的网关。
https://stackoverflow.com/questions/3385201/