news 2026/10/20 5:47:28

【基础IO】-5-简单理解三个标准流——stdin、stdout、stderr

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【基础IO】-5-简单理解三个标准流——stdin、stdout、stderr

**🎬 博主名称**:迷途之人不知返

🔥 个人专栏: 《C语言》、《数据结构》、《C++》、《Linux》

🗂️ Gitee仓库: 《C语言》、《数据结构》、《C++》、《Linux》

</> 算法专栏: 《算法精选集》


三个标准流

  • 1、为什么需要
  • 2、为什么一定是“三个”
  • 3、怎么做到的
  • 4、修改标准输出流与标准错误流的操作示范

在这篇文章中,我们将从以下三个方面讲述:

  1. 为什么需要三个标准流
  2. 为什么默认打开的一定是三个标准流
  3. 怎么实现:打开这三个标准流

1、为什么需要

程序的核心作用是处理获取进来的数据。那么程序就必须有办法获取数据,以及有办法让我们观察数据处理的过程,即能够打印数据。

所以我们就需要有:

  • stdin:标准输入流。以后用户输入的数据,都将从标准输入流出发,流向程序
  • stdout:标准输出流。以后程序处理数据的结果,若没有特别指定流,默认向标准输出流中流出,最终到达显示设备

现在程序能够获取数据、打印数据。在编写代码,执行代码的时候,我们还希望当程序运行发生错误的时候,有办法将错误的具体信息提炼出来让我们知道,以便后续的调试代码,即能够Debug。

所以我们也需要有stderr标准错误流。如果程序运行发生了错误,具体的错误信息就会写入标准错误流,最终让我们能够获取,从而帮助我们修复代码的错误。

2、为什么一定是“三个”

三个标准流连接的设备,一般是:

  • stdin···> 键盘
  • stdout···> 显示器
  • stderr···> 也是显示器

既然标准输出流和标准错误流连接的设备都是显示器,那么我们为什么要同时打开stdin stdout stderr三个标准流呢?为什么不只打开stdin stdout?

原因很好理解:我们希望程序的打印信息和错误信息能够分开来,即分离正常和错误。信息糅杂在一起,还需要做一步分离提取的工作;而将打印结果与错误信息分开来,对着错误信息在打印结果找猫腻,能够更快找到Bug,从而提高调试的效率。

3、怎么做到的

机器开机的时候,做的其中一个重要的工作就是将操作系统加载到内存。

而在操作系统加载的过程中,一定有bash父进程被创建,然后加载磁盘文件、显示器文件到内存。

接着连续创建三个struct file对象与磁盘、显示器建立联系,最后在bash进程files_struct的fd_array中,下标0 1 2处分别放入:

  • 标准输入文件流
  • 标准输出文件流
  • 标准错误文件流






这样bash就打开了三个标准流。

bash之后创建的子进程,进行的是对bash父进程的写时拷贝,包括拷贝fd_array。而写时拷贝,fd_array倒是拷贝下来了,但是其中保存的file*指针还是与bash父进程一样的。







可以理解为stdin stdout stderr三个文件file*指针被传递下去了。所以子进程一旦被创建,默认打开了stdin stdout stderr三个标准流。(就像环境变量和命令行参数一样)

4、修改标准输出流与标准错误流的操作示范




#include<stdio.h>intmain(){fprintf(stdout,"Hello stdout\n");fprintf(stderr,"Hello stderr\n");return0;}



./test.exe1>loga.txt2>logb.txt






版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 5:47:27

端侧AI智能体实战:鸿蒙+蓝耘MaaS打造离线文物导游

1. 项目概述&#xff1a;这不是一个“AI导游App”&#xff0c;而是一次端侧智能体的完整落地验证“鸿蒙AI&#xff1a;国庆我在故宫用了把‘AI 导游’”——这个标题里藏着三个被大众忽略但极其关键的技术信号&#xff1a;“鸿蒙”不是操作系统代名词&#xff0c;而是分布式智能…

作者头像 李华
网站建设 2026/10/20 5:47:20

绕WAF的XSS漏洞利用实战:从编码绕过到动态构造

做安全评估这些年&#xff0c;我遇到最多的一个误解就是&#xff1a;只要上了WAF&#xff0c;XSS就测都不用测了。实际上&#xff0c;WAF是一道很有价值的“闸门”&#xff0c;但绝不是一堵密不透风的墙。我经常跟团队里新人说&#xff0c;WAF在防护端做得越细&#xff0c;测试…

作者头像 李华
网站建设 2026/10/20 5:44:47

Llama 2提示词工程实战:从对话模板到思维链的调优全攻略

我第一次接触这个模型时&#xff0c;最大的教训就是把别的闭源模型提示词原封不动地搬过来。结果模型要么回答得飘忽不定&#xff0c;要么频繁重复&#xff0c;要么完全无视我设定的输出格式。折腾一晚上之后才意识到&#xff1a;Llama 2提示词工程的第一道门槛&#xff0c;不是…

作者头像 李华
网站建设 2026/10/20 5:43:57

无源码IPA安全加固:越狱检测、防篡改与重签名实战

上个月接手一个外包遗留的 iOS 项目&#xff0c;原团队解散后只留下一台编译机&#xff0c;能从里面导出的最终交付物就是一个整包 IPA。客户的要求很明确&#xff1a;“这个 App 连越狱检测和防篡改都没有&#xff0c;帮我把基础安全处理补上。”没有源码&#xff0c;不能重新…

作者头像 李华
网站建设 2026/10/20 5:43:57

Sidecar与后训练:本地大模型如何越用越懂你

这两年跟同行聊本地大模型&#xff0c;绕不开一个话题&#xff1a;模型跑起来了&#xff0c;然后呢&#xff1f;下载一个开源基座模型&#xff0c;在本地部署、量化、接进自己的工具链&#xff0c;一开始确实兴奋&#xff0c;但用一个礼拜就会发现&#xff0c;它永远在用最初那…

作者头像 李华
网站建设 2026/10/20 5:42:36

工业液冷工作站选型指南:从算力账到验收单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华