我对这三个文件的用途感到相当困惑。如果我的理解是正确的话stdin
是程序写入其请求以在进程中运行任务的文件,stdout
是内核将其输出写入其中的文件,并且请求它的进程从中访问信息,并且stderr
是输入所有异常的文件。在打开这些文件以检查这些是否确实发生时,我发现似乎没有任何迹象表明如此!
我想知道的是这些文件的确切用途是什么,完全用很少的技术术语来简单地回答!
标准输入- 这是文件句柄您的进程读取该信息以从您那里获取信息。
标准输出- 您的进程将常规输出写入此文件句柄。
标准误- 您的进程将诊断输出写入此文件句柄。
这已经是我能做到的最愚蠢的了:-)
当然,这主要是按照惯例。如果您愿意,没有什么可以阻止您将诊断信息写入标准输出。您甚至可以完全关闭三个文件句柄并打开您自己的 I/O 文件。
当您的进程启动时,它应该已经打开了这些句柄,并且只能读取和/或写入它们。
默认情况下,它们可能连接到您的终端设备(例如,/dev/tty
)但是 shell 将允许您在进程启动之前在这些句柄和特定文件和/或设备(甚至到其他进程的管道)之间建立连接(一些可能的操作相当聪明)。
一个例子是:
my_prog <inputfile 2>errorfile | grep XYZ
这将:
- 创建一个流程
my_prog
.
- open
inputfile
作为您的标准输入(文件句柄 0)。
- open
errorfile
作为您的标准错误(文件句柄 2)。
- create another过程为
grep
.
- 附上标准输出
my_prog
到标准输入grep
.
回复您的评论:
当我在 /dev 文件夹中打开这些文件时,为什么我永远看不到正在运行的进程的输出?
这是因为它们不是普通文件。虽然 UNIX 呈现一切作为文件系统中某处的文件,这并不意味着它在最低级别上如此。大多数文件位于/dev
层次结构要么是字符设备,要么是块设备,实际上是设备驱动程序。它们没有尺寸,但有主设备号和次设备号。
当您打开它们时,您将连接到设备驱动程序而不是物理文件,并且设备驱动程序足够智能,知道应该单独处理单独的进程。
Linux 也是同样的情况/proc
文件系统。这些不是真正的文件,只是严格控制的内核信息网关。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)