C/C++三个标准设备文件句柄
在c/c++中定义了三个标准宏:
这些宏分别对应不同的设备句柄
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++三个标准设备文件句柄相关推荐
- Real World Haskell 第七章 I/O
几乎所有程序都是用来从外部世界收集数据,处理数据,并把处理结果返回给外部世界的.也就是说,输入和输出对于程序设计来说相当关键. Haskell的I/O系统很强大,表达能力很强也很容易使用,理解它的原理 ...
- C# 语言规范_版本5.0 (第10章 类)
1. 类 类是一种数据结构,它可以包含数据成员(常量和字段).函数成员(方法.属性.事件.索引器.运算符.实例构造函数.静态构造函数和析构函数)以及嵌套类型.类类型支持继承,继承是一种机制,它使派生类 ...
- Perl语言学习总结
Perl ------practical extraction and report language <一>.实用性摘录与报表语言: <二>.常用到的与perl有关的网站:h ...
- windows网络编程 --网络聊天室(2)
文章目录 IOCP模型 常用IOCP函数 基于IOCP的网络聊天室 服务器端 客户端 IOCP模型 IOCP :输入输出完成端口. 是支持多个同时发生的异步I/O操作的应用程序编程接口,IOCP特别适 ...
- C语言 文件基础知识整理
C语言文件基础知识 之前学C语言的时候老师讲文件讲的相当潦草,因为大作业的关系现在只能自己重听自学一遍.以下是根据北理工的C语言程序设计mooc的文件单元课件和上课时的补充内容所整理的C语言文件基础知 ...
- linux的文件 IO
文件 io 和标准 io 区别: 1.缓冲区不同:标准 IO 有缓冲,文件 IO 无缓冲: 2.操作对象不同: 标准 IO 操作流 FILE *fp stdin stdout stderr ...
- Linux 利用 /proc 目录恢复误删除的文件
Linux 利用 /proc 目录恢复误删除的文件 在 Linux 系统中删除文件时,无论文件是否在使用中,甚至是还在写入,都可以被 rm 删除.不过,rm 删除文件时并非是被真正地擦除,特别是当文件 ...
- 【并发编程三】C++进程通信——管道(pipe)
[并发编程三]C++实现通信--管道(pipe) 一.管道(pipe) 二.匿名管道 1.简介 2.父子进程:匿名管道的通信过程? 3.相关函数 3.1.创建管道CreatePipe 3.2.写入管道 ...
- 第三章| 3.1文件处理
1.三元运算 简单条件语句: if 条件成立:val = 1 else: val = 2 改成三元运算: val = 1 if 条件成立 else 2 2.文件处理 (用python对硬盘上的文件操作 ...
最新文章
- mysql主从切换(正常切换)
- pytorch focalloss多分类 单分类
- css学习入门篇(1)
- QT的QDesignerPropertyEditorInterface类的使用
- [CQOI2012]交换棋子【网络流】【费用流】
- 【Centos7】安装memcached
- Dynamo:亚马逊的高可用键值存储
- mysql添加分区健_MySQL添加分区添加索引
- python测试代码怎么写_如何使用python做单元测试?
- 程序员很平凡,但从事着不平凡的工作!
- Spring mvc框架下使用kaptcha生成验证码
- LeetCode 25 Reverse Nodes in k-Group Add to List (划分list为k组)
- SpringBoot 实战 (二) | 第一个 SpringBoot 工程详解
- ES6的一个基础类,支持私有属性和方法,支持event和mix
- TAOCP--MIX环境准备
- VIN码/车架号的详解,车架号识别,VIN码识别,OCR车架号识别能带来什么
- Linux基础知识命令总结1
- 音响常用电解电容转发
- 零基础入门无人机--无人机概述--1
- 我的世界java皮肤展开图,我的世界情侣皮肤,我的世界皮肤展开图做图片
热门文章
- python导入自定义模块_如何Import自定义的Python模块?
- mysql 日期_「13」MySQL中与日期与时间相关的函数
- 记录一次被DDOS攻击,攻击类型:UDPFLOOD
- Android日志工具Log的使用
- ERROR: Could not install Gradle distribution from ‘https://services.gradle.org/distributions/gradle
- bat文件打开一闪就没了_批量提取文件名
- 模块化加载_webpack模块化原理-异步加载模块
- SqlServer保留几位小数的两种做法
- php 2个时间查询差几天,PHP怎么计算2个日期差
- padding和卷积的区别_NiN:使用11卷积层替代全连接层