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

对 stdin、stdout 和 stderr 感到困惑?

Norman Smith 1月前

33 0

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

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

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

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

    程序的 角度而不是内核的角度来 考虑“标准输入”、“标准输出”和“标准错误”

    当程序需要打印输出时,它通常会打印到“标准输出”。程序通常使用 将输出打印到标准输出 printf ,它仅打印到标准输出。

    当程序需要打印错误信息(不一定是异常,异常是编程语言构造,强加在更高级别)时,它通常会打印到“标准错误”。它通常使用 来执行此操作 fprintf fopen 打开的任何其他文件 fdopen .

    当文件需要读取输入时,使用 \'standard in\',使用 fread fgets getchar .

    任何这些文件都可以很容易地 从 shell 重定向

    cat /etc/passwd > /tmp/out     # redirect cat's standard out to /tmp/foo
    cat /nonexistant 2> /tmp/err   # redirect cat's standard error to /tmp/error
    cat < /etc/passwd              # redirect cat's standard input to /etc/passwd
    

    或者,整个玉米卷饼:

    cat < /etc/passwd > /tmp/out 2> /tmp/err
    

    有两个重要的注意事项:首先,“标准输入”、“标准输出”和“标准错误”只是一种惯例。它们是一种 非常强大的 惯例,但这只是一种协议,即能够像这样运行程序非常好: grep echo /etc/services | awk '{print $2;}' | sort 并将每个程序的标准输出挂接到管道中下一个程序的标准输入中。

    其次,我给出了用于处理文件流( FILE * 对象)的标准 ISO C 函数——在内核级别,它是所有文件描述符( int 对文件表的引用)和许多低级操作(如 read 和) write ,它们不能像 ISO C 函数那样进行愉快的缓冲。我想保持简单并使用更简单的函数,但我认为您应该知道替代方案。:)

返回
作者最近主题: