详解C语言中的stdin,stdout,stderr

2023-10-27

我们在写C程序时经常遇到printf(),fprintf(),perror(),这些东西到底有什么作用。说到这不得不提及stdin,stdout,stderr。想想,我们在用C去写文件时的操作,File *fp=fopen(),这个fp就是我们向系统申请的,相当于一通往文件的通道。

 

其实,stdin,stdout,stderr就是这个fp,不过他是随着计算机系统的开启默认打开的,其中0就是stdin,表示输入流,指从键盘输入,1代表stdout,2代表stderr,1,2默认是显示器。printf()其实就是向stdout中输出,等同于fprintf(stdout,“****”),perror()其实就是向stderr中输出,相当于fprintf(stderr,“***”),那到底stdout,和stderr有什么区别和作用呢?

 

我们在写程序时用printf()是为了我们能监控我们的程序运行状况,或者是说debug,如果我们的程序是一直运行,不停下来,我们不可能时刻盯着屏幕去看程序输出,这时我们就可以用文件重定向。将输出到一文件中,我们以后就可以看这文件就行。举个例子,test.c

[cpp] view plain copy 

1. <pre class="cpp" name="code">#include<stdio.h>  

2.   

3. int main()  

4. {  

5.      printf("stdout Helo World!!\n");   

6.   

7.      return 0;  

8. }  

编译过后,我们./test > test.txt(默认是将stdout里的内容重定向到文件中),这样就把test程序输出的内容输出到test.txt文件中。还有一种更明晰的写法./test  1>test.txt,这里的1就代表stdout。说到这你应该知道stderr该怎样处理了。再举个例子test.c:

[cpp] view plain copy 

1. #include<stdio.h>  

2.   

3. int main()  

4. {  

5.      printf("Stdout Helo World!!\n");  

6.      fprintf(stdout,"Stdout Hello World!!\n");  

7.      perror("Stderr Hello World!!\n");  

8.      fprintf(stderr,"Stderr Hello World!!\n");  

9.        

10.      return 0;  

11. }  

编译过后,./test,屏幕上是四条输出,如果./test > test.ext ,结果是屏幕上输出两条Stderr Hello World!!,Stdout Helo World!!在文件test.txt中,基于上面说的很容易理解现在的结果,于是我们可以随便处理我们想要的输出,例如:

 

./test 1>testout.txt 2>testerr.txt,我们将stdout输出到文件testout.txt中,将stderr输出到testerr.txt文件中;

./test 1>testout.txt ,将stdout输出到文件testout.txt 中,stderr输出到屏幕上;

./test 2>testerr.txt,将stderr输出到文件testerr.txt中,stdout输出到屏幕上;

./test > test.txt 2>&1,这是将stdout和stderr重定向到同一文件test.txt文件中。

 

如果我们不想看到输出内容,既不想在屏幕上看见,也不想重定向到文件中,别担心,万能的Linux有解决办法,./test > /dev/zero 2>&1,这样就看不到任何输出了。

 

Note:stderr,和stdout还有重要一点区别,stderr是没有缓冲的,它立即输出,而stdout默认是行缓冲,也就是它遇到‘\n’,才向外输出内容,如果你想stdout也实时输出内容,那就在输出语句后加上fflush(stdout),这样就能达到实时输出的效果。


转载于微信公众号 嵌入式ARM


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

详解C语言中的stdin,stdout,stderr 的相关文章

  • 深入理解【DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection】

    DINO DETR with Improved DeNoising Anchor Boxes for End to End Object Detection URL https arxiv org abs 2203 03605 DETR系列
  • 阿里云微消息MQTT连接参数取值位置记录

    二 连接参数获取 Broker Address取值如下 Topic 取值地方 Client ID GroupID 客户端参数 如下 GID MQTT ConsumerTest0001 user Name 和Password取值位置如下 Ac
  • 论文笔记:A survey of deep nonnegative matrix factorization

    0 abstract 深度非负矩阵分解 Deep NMF 是近年来一种有效的特征提取策略 通过基于 NMF 算法反复分解矩阵 我们获得了分层神经网络结构 并探索了数据的更多可解释表示 本文主要针对 Deep NMF 进行了一些理论研究 系统
  • CTFSHOW web入门——web9

    在生产环境vim改错别字死机了 vim异常关闭 了解到linux下vi vim异常关闭是会存留 swp文件 访问index php swp 获得flag
  • Nginx安装官方YUM源安装部署

    注意 我使用的是Linux Rocky8 6版本 兼容部分CentOS版本 Ubuntu和其他OS版本 命令 文件路径 相关环境版本需要参考官方文档 Nginx安装部署 安装Nginx软件的方式有很多种 分为如下几种 1 源码编译 gt N
  • 扑克牌问题之比较大小(JAVA)

    当然扑克牌问题中最复杂的就是比较大小了 然而扑克牌中的大小并不是ascii码决定的 而是有扑克牌自己的规则 下面就是扑克牌问题中神一样的方法 int position char c String line 34567890JQKA2 ret
  • Python3数据类型

    Python3数据类型 数据类型 描述 可变 Y N Number 数字 N String 字符串 N List 列表 Y Tuple 元组 N Set 集合 Y Dictionary 字典 Y python中数字有四种类型 整数 布尔型
  • Windows下的Rime輸入法與小鶴雙拼的配置

    今天結束了這一週的考試 於是有一個晚上的空閒時間來寫博客了 考慮到已經沒有使用簡體字的太大必要了 所以我也準備在博客的書寫中使用繁體漢字 這就涉及到了很多輸入法 比如我正在使用的QQ輸入法 無法正確處理一簡對多繁 的一個大問題 大多數的輸入
  • java 使用hutool工具进行MD5加密

    引入依赖
  • 咏儿 gz.lrd

    人 生 惬 意 几 个 秋 闲 云 野 鹤 解 春 愁 醉 看 过 往 十 年 数 还 笑 今 朝 小 儿 休
  • 高仿美团主界面<一>

    声明 本demo还未完善 正在持续更新中 先上图吧 这个小demo资源图片全是用青花瓷抠出来的 现在只是完成了 一部分 会持续更行中 有兴趣的朋友可以关注我 我们一起coding 一起分享 然后这个demo很简单 但是有一些小细节可以和大家
  • MySQL性能优化配置/etc/my.cnf参数

    MySQL etc my cnf文件配置 client port 3306 socket var lib mysql mysql sock default character set utf8 mysql no auto rehash 仅允
  • Java多线程使用案例【附可运行代码】

    标题Java多线程使用案例 1 创建线程池 创建任务 将任务提交到线程池中执行 public class Test1 private static Map
  • Parcelable 和 Serializable的区别和使用

    序列化 为了保存在内存中的各种对象的状态 并可以把保存的对象的状态读出来 一 Seralizable介绍 1 Serializable 是java的序列化技术 最简单的使用方式为在需要序列化的class增加implements Serial
  • 快速部署Qsign签名服务器为go-cqhttp或icqq进行签名认证

    rhwong unidbg fetch qsign onekey 用于一键在Windows下部署fuqiuluo unidbg fetch qsign github com 本项目使用1 1 6版本 由于当前go cqhttp 1 1 0
  • cmake:指定install的安装目录

    使用 CMAKE INSTALL PREFIX 来指定 方法1 在执行cmake时指定 cmake DCMAKE INSTALL PREFIX lt 你想要安装的路径 gt 方法二 设置CMAKE INSTALL PREFIX 变量 SET
  • IDEA中plugins中搜索不到插件问题解决

    2018 3 5 IDEA中plugins中搜索不到插件问题解决 由于项目中需要一些简化开发的一些插件 但是在idea中搜索不到任何的插件 很是痛苦 下面提供两种解决办法 一 第一种解决办法 首先进入File gt setting界面 gt
  • 什么是ELK

    什么是ELK ELK 并不是一个技术框架的名称 它其实是一个三位一体的技术名词 ELK 的每个字母都来自一个技术组件 分别是 Elasticsearch 简称 ES Logstash 和 Kibana 三个技术组件是独立的 后两个被elas
  • pcl中ransac提取直线_pcl学习笔记1

    文 云师弟 源 云师弟 编 云师弟 文仅交流 如侵联删 点击上方 云师弟的学习空间 关注 星标 获取有趣 好玩的前沿干货 PCL The Point Cloud Library 是用于2D 3D图像和点云处理的大规模开放项目 开源软件 它是
  • 小程序数据证明采集_小程序数据埋点实践之曝光量

    什么是数据埋点 所谓数据埋点就是应用在规定流程中 对特定行为或事件进行数据采集 使用采集的数据做用户分析和页面分析 可以获得应用的总体使用情况 为后续优化产品和运营提供数据支撑 常见数据埋点内容包括 访问量 停留时长 曝光量 点击量 跳出率

随机推荐

  • docker 命令查看当前所有服务的物理性能命令

    docker stats no stream docker ps awk NR gt 1 print NF grep wmy CONTAINER sort n r k 8 docker stats 查看每个容器状态 no stream 当前
  • 简单几步,用Visual Studio写出并运行一个c程序

    1 首先请确保安装了相应的IDE 作者使用的VS版本为最新 已目前文章发布时间为准 的2022版本 而版本只要不是太远古本方法通用 2 创建一个新项目 打开VS 点击创建新项目 找到c 的空项目 点击使其创建 更换项目名称 点击右下角创建
  • 【Yarn】Yarn StateMechine有限状态机

    文章目录 1 概述 2 StateMachine 2 1 InternalStateMachine 2 1 1 maybeMakeStateMachineTable 2 2 StateMachineFactory 2 2 1 获取实例 2
  • Available Packages显示nothing to show

    项目场景 pycharm添加包 use conda package manager 问题描述 在使用pycharm添加包时availiable packages 显示nothing to show 且右上角一直刷新 原因分析 安装的时候an
  • python中int的功能_Python内置函数int()高级用法

    int 函数常用来把其他类型转换为整数 例如 gt gt gt int 3 2 3 gt gt gt int 1 3 0 其实 int是Python内置类型之一 之所以能够当作函数来用 是因为它提供了构造方法 另外 它还提供了第二个参数支持
  • upload-labs靶场通关指南(第1-3关)

    今天继续给大家介绍渗透测试相关知识 本文主要内容是upload labs靶场通关指南 第1 3关 免责声明 本文所介绍的内容仅做学习交流使用 严禁利用文中技术进行非法行为 否则造成一切严重后果自负 再次强调 严禁对未授权设备进行渗透测试 一
  • 数据库引用

    目录 1 手动引用 1 1 背景 1 2 程序 1 3 使用 2 数据库引用 DBRef 2 1 背景 2 2 格式 2 3 支持数据库引用的驱动程序 2 4 使用 进入MongoDB中文手册 4 2版本 目录 对于MongoDB中的许多用
  • java 返回树状类型数据

    最近新来了个前端 菜单等相关功能不想使用前端的数标签 希望后端组装好数结构返回 于是写了个通用型的工具类 供以后遇见类似的问题时使用 实体类 Data public class TreeTest private String id priv
  • 前端工作中 关于 nginx 本地代理 的初步认识

    一 原项目回滚到最初 前端做过 proxy 代理配置 二 下载 nginx 稳定版 并解压到自己所指定的位置 三 配置 nginx 找到它下边的 conf 文件中的 nginx conf文件 备注 问后端 server 如何配置 从后端那拉
  • Java配置JDK环境变量、自动安装JRE(详细)

    写在前面 什么是JDK JRE 1 JDK 即Java开发工具包 2 JRE 即Java运行环境 一 下载并配置 JDK 1 在官网上找到自己需要下载的java开发工具包JDK 地址如下 Java Downloads Oracle 点击链接
  • 外包实在是太坑了,划水三年,感觉人都废了

    先说一下自己的情况 专科生 19年通过校招进入杭州某个外包软件公司 干了接近3年的功能测试 今年年初 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了3年的功能测试 已经让我变得不思进取 谈了几年的
  • 互联网背景时代下的大机遇,为什么用nosql

    1 单机MySQL的美好年代 在90年代 一个网站的访问量一般都不大 用单个数据库完全可以轻松应付 在那个时候 更多的都是静态网页 动态交互类型的网站不多 上述架构下 我们来看看数据存储的瓶颈是什么 1 数据量的总大小 一个机器放不下时2
  • Vue页面向嵌套的iframe中的html页面传值

    问题 主页面为 vue 页面中嵌套了iframe 目的是使用视频通话插件 需要向html页面传值 只需两个步骤即可
  • 网页数据解析与提取----XPath

    目录 网页数据解析与提取 XPath XPath 使用 1 什么是XPath 2 准备工作 3 所有节点 4 子节点 5 父节点 6 属性匹配 7 文本获取 8 属性获取 9 属性多值匹配 10 多属性匹配 11 按序选择 12 节点轴选择
  • nuxt服务端渲染技术

    第5章 网站前台 活动与招聘 学习目标 掌握NUXT框架的基本使用方法 完成十次方网站前台的搭建 完成十次方网站前台活动模块的功能 完成十次方网站前台招聘模块的功能 1 服务端渲染技术NUXT 1 1 什么是服务端渲染 服务端渲染又称SSR
  • 我的油画作品

    原创油画作品 樱花 规格 30x40cm 原创油画作品 山峰 规格 30x40cm 原创油画作品 In the garden 规格 80x60cm 其它作品
  • python 图像识别男女_用机器学习来做人脸性别识别

    在传统编程中 图像识别一直是一个难点 虽然人能轻松做到 但是用逻辑来描述这个过程 并转换成程序是很难的 机器学习的出现让图像识别技术有了突破性的进展 卷积神经网络的出现 又使图像识别更上了一次层次 卷积神经网络由一个或多个卷积层和顶端的全连
  • 为了预测股票,我用TensorFlow深度学习了股市数据

    完整源码可在微信公众号 01二进制 后台回复 股市分析 获取 阅读此文前建议先阅读 找对象的过程中 我竟然理解了什么是机器学习 前言 相信大家这几天或多或少的都开始关注到股市了 虽然我还不是很懂里面的一些套路 但是从最近各个公众号的推送里面
  • 无盘服务器chkdsk *: /f)修复命令,巧用CHKDSK命令修复U盘文件或目录损坏问题

    巧用CHKDSK命令修复U盘文件或目录损坏问题 U盘是我们常用的随身移动存储工具 我们平时在使用U盘时难免会出现那么几次 直接拔出U盘 结果导致 U盘的文件或目录损坏且无法读取 U盘里的任何内容都无法打开了 有些朋友认为是磁盘出现坏道直接舍
  • 详解C语言中的stdin,stdout,stderr

    我们在写C程序时经常遇到printf fprintf perror 这些东西到底有什么作用 说到这不得不提及stdin stdout stderr 想想 我们在用C去写文件时的操作 File fp fopen 这个fp就是我们向系统申请的