在c/c++中定义了三个标准宏:

stdout(Standardoutput)标准输出
stdin(Standardinput)标准输入
stderr(Standarderror)标准错误

这些宏分别对应不同的设备句柄

stdout对应的是屏幕,一般来说指的是终端窗口上的显示文字信息的屏幕!

stdin对应的是输入缓冲区

stderr和stdout对应的是一样的,这个宏是给perror使用的,这里就顺便补充一下printf与perror的区别在于哪儿吧!

printf会将字符先写入输入缓冲区,在输出到stdut上,而perror是直接输入到stderr上,也就是说略过这个过程,要知道输出缓冲区当屏幕爆满时会自动清除,这个是由操作系统来完成的,而输入缓冲区的是根据栈大小来的,一旦超出栈大小范围就会被操作系统卡嚓掉!

并且stdin.h头文件里还定义了error变量,当我们调用标准c库函数时出了错误,一般此变量会被设置,具体可以查看相关文档对一些函数的错误码介绍,就像c++里的异常流一样!try~

具体点来说当我们对stdout文件句柄进行操作时其实c语言就知道我们是想把数据输出到屏幕上,所以就会内部调用相关内核函数来输出,具体是由操作系统来完成的包括printf!

就像linux下malloc内部调用的是brk/sbrk函数一样,而windows内部则调用的是HeapAlloc一样,毕竟内存在MMU进行虚拟地址映射以后内存的管理就交给操作系统了,操作系统通过总线与MMU交互来分配内存,所以根据不同的系统平台会提供不同的接口~

比如printf是将字符输出到终端或dos界面上,在windows下是输出到dos界面上,即内部调用的是windows操控dos系统上的api,我们的标准c语言程序均运行的dos系统之上,而linux下则是通过shell直接输出到终端界面上~,内部调用的据博主推测应该是shell上的echo脚本命令,所以linux下是shell,而在运行shell的就是终端程序!

C/C++三个标准设备文件句柄相关推荐

  1. Real World Haskell 第七章 I/O

    几乎所有程序都是用来从外部世界收集数据,处理数据,并把处理结果返回给外部世界的.也就是说,输入和输出对于程序设计来说相当关键. Haskell的I/O系统很强大,表达能力很强也很容易使用,理解它的原理 ...

  2. C# 语言规范_版本5.0 (第10章 类)

    1. 类 类是一种数据结构,它可以包含数据成员(常量和字段).函数成员(方法.属性.事件.索引器.运算符.实例构造函数.静态构造函数和析构函数)以及嵌套类型.类类型支持继承,继承是一种机制,它使派生类 ...

  3. Perl语言学习总结

    Perl ------practical extraction and report language <一>.实用性摘录与报表语言: <二>.常用到的与perl有关的网站:h ...

  4. windows网络编程 --网络聊天室(2)

    文章目录 IOCP模型 常用IOCP函数 基于IOCP的网络聊天室 服务器端 客户端 IOCP模型 IOCP :输入输出完成端口. 是支持多个同时发生的异步I/O操作的应用程序编程接口,IOCP特别适 ...

  5. C语言 文件基础知识整理

    C语言文件基础知识 之前学C语言的时候老师讲文件讲的相当潦草,因为大作业的关系现在只能自己重听自学一遍.以下是根据北理工的C语言程序设计mooc的文件单元课件和上课时的补充内容所整理的C语言文件基础知 ...

  6. linux的文件 IO

    文件 io 和标准 io 区别: 1.缓冲区不同:标准 IO 有缓冲,文件 IO 无缓冲: 2.操作对象不同:       标准 IO 操作流 FILE *fp stdin stdout stderr ...

  7. Linux 利用 /proc 目录恢复误删除的文件

    Linux 利用 /proc 目录恢复误删除的文件 在 Linux 系统中删除文件时,无论文件是否在使用中,甚至是还在写入,都可以被 rm 删除.不过,rm 删除文件时并非是被真正地擦除,特别是当文件 ...

  8. 【并发编程三】C++进程通信——管道(pipe)

    [并发编程三]C++实现通信--管道(pipe) 一.管道(pipe) 二.匿名管道 1.简介 2.父子进程:匿名管道的通信过程? 3.相关函数 3.1.创建管道CreatePipe 3.2.写入管道 ...

  9. 第三章| 3.1文件处理

    1.三元运算 简单条件语句: if 条件成立:val = 1 else: val = 2 改成三元运算: val = 1 if 条件成立 else 2 2.文件处理 (用python对硬盘上的文件操作 ...

最新文章

  1. mysql主从切换(正常切换)
  2. pytorch focalloss多分类 单分类
  3. css学习入门篇(1)
  4. QT的QDesignerPropertyEditorInterface类的使用
  5. [CQOI2012]交换棋子【网络流】【费用流】
  6. 【Centos7】安装memcached
  7. Dynamo:亚马逊的高可用键值存储
  8. mysql添加分区健_MySQL添加分区添加索引
  9. python测试代码怎么写_如何使用python做单元测试?
  10. 程序员很平凡,但从事着不平凡的工作!
  11. Spring mvc框架下使用kaptcha生成验证码
  12. LeetCode 25 Reverse Nodes in k-Group Add to List (划分list为k组)
  13. SpringBoot 实战 (二) | 第一个 SpringBoot 工程详解
  14. ES6的一个基础类,支持私有属性和方法,支持event和mix
  15. TAOCP--MIX环境准备
  16. VIN码/车架号的详解,车架号识别,VIN码识别,OCR车架号识别能带来什么
  17. Linux基础知识命令总结1
  18. 音响常用电解电容转发
  19. 零基础入门无人机--无人机概述--1
  20. 我的世界java皮肤展开图,我的世界情侣皮肤,我的世界皮肤展开图做图片

热门文章

  1. python导入自定义模块_如何Import自定义的Python模块?
  2. mysql 日期_「13」MySQL中与日期与时间相关的函数
  3. 记录一次被DDOS攻击,攻击类型:UDPFLOOD
  4. Android日志工具Log的使用
  5. ERROR: Could not install Gradle distribution from ‘https://services.gradle.org/distributions/gradle
  6. bat文件打开一闪就没了_批量提取文件名
  7. 模块化加载_webpack模块化原理-异步加载模块
  8. SqlServer保留几位小数的两种做法
  9. php 2个时间查询差几天,PHP怎么计算2个日期差
  10. padding和卷积的区别_NiN:使用11卷积层替代全连接层