linux - 对标准输入、标准输出和标准错误感到困惑?

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

相关文章:

python - 如何并行化一个简单的 Python 循环?

python - 在 TensorFlow 中,Session.run() 和 Tensor.eva

python - 如何在正则表达式中使用变量?

linux - 遍历带有空格的文件列表

linux - 增加 Linux 中 TCP/IP 连接的最大数量

linux - 如何更改 Linux 中打开文件的数量限制?

python - 将 numpy dtypes 转换为原生 python 类型

linux - `set -x` 有什么作用?

linux - fork()、vfork()、exec()和clone()的区别

python - python - 如何按两列或多列对python pandas中的dataFram