8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

对 stdin、stdout 和 stderr 感到困惑?

Norman Smith 1月前

35 0

我对这三个文件的用途感到很困惑。如果我的理解正确的话,stdin 是程序写入其在进程中运行任务的请求的文件,stdout 是...

我对这三个文件的用途感到困惑。如果我的理解正确,它们 stdin 是程序写入其在进程中运行任务的请求的文件、 stdout 内核写入其输出以及请求它的进程从中访问信息的文件、以及 stderr 所有异常都输入到的文件。打开这些文件以检查这些是否确实发生,我发现似乎没有任何迹象表明如此!

我想知道的是这些文件到底有什么用途,用很少的技术术语来给出绝对简化的答案!

帖子版权声明 1、本帖标题:对 stdin、stdout 和 stderr 感到困惑?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Norman Smith在本站《symfony》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 标准输入|STDIN - 这是 您的进程读取以从您那里获取信息的 文件句柄

    标准输出|STDOUT – 您的进程将常规输出写入此文件句柄。

    标准错误|STDERR – 您的进程将诊断输出写入此文件句柄。

    这大概是我能做到的最简化的了 :-)

    当然,这主要是惯例。如果您愿意,没有什么可以阻止您将诊断信息写入标准输出。您甚至可以完全关闭这三个文件句柄并打开自己的文件进行 I/O。

    当您的进程启动时,它应该已经打开这些句柄,并且它可以读取和/或写入它们。

    默认情况下,它们可能连接到您的终端设备(例如 /dev/tty ),但 shell 将允许您在进程启动之前建立这些句柄与特定文件和/或设备(甚至是到其他进程的管道)之间的连接(一些可能的操作相当巧妙)。

    例如:

    my_prog <inputfile 2>errorfile | grep XYZ
    

    其将:

    • 创建一个流程 my_prog .
    • 作为标准输入 inputfile 打开
    • 作为标准错误 errorfile 打开
    • 创建 另一个 进程 grep .
    • 标准输出附加 my_prog 到 的标准输入 grep .

    回复您的评论:

    当我在 /dev 文件夹中打开这些文件时,怎么就看不到正在运行的进程的输出呢?

    这是因为它们不是普通文件。虽然 UNIX 将 所有内容 为文件系统中的某个文件,但这并不意味着最低级别也是如此。 /dev 层次结构中的大多数文件都是字符设备或块设备,实际上是设备驱动程序。它们没有大小,但有主设备号和次设备号。

    当您打开它们时,您连接到的是设备驱动程序而不是物理文件,并且设备驱动程序足够智能,知道应该单独处理单独的进程。

    Linux 文件系统也是如此 /proc 。它们不是真正的文件,只是严格控制的内核信息网关。

返回
作者最近主题: