明解C语言【中级篇】
明解C语言【中级篇】 学习记录
Chapter 09: 文件处理
明解C语言【中级篇】
- 明解C语言【中级篇】 学习记录
- **Chapter 09:** 文件处理
- 前言
- 流(stream)
- 流与缓冲的关系?
前言
记录学习明解C语言【中级篇】的部分章节,作为知识总结,方便回阅翻看。
Chapter 9-1 标准流
本节结构:
流(stream)
定义
在C语言中,术语流表示任意输入的源或任意输出的目的地。-----------------解释:什么是源和目的地?通过键盘输入,屏幕输出的小程序中,键盘和屏幕就是**流**,键盘就是输入的源,屏幕就是输入的目的地。
分类
标准流
文件指针 | 流 | 默认含义 |
---|---|---|
stdin | 标准输入 | 键盘 |
stdout | 标准输出 | 屏幕 |
stderr | 标准错误 | 屏幕 |
备注:
文件指针:用于存放文件首地址的指针,用于对流进行访问。
stdin/stdout/stderr:它们是FILE *类型的对象,它们都是常量,分别指向键盘、显示器、显示器。默认配置情况下,c程序启动时,系统会自动打开这三个文件【参照Linux系统】。
- 重定向
既然std三重曲是默认情况,那么就对应有指定情况,即指定输入输出的文件,这便是:重定向。
输入自然就对应:输入重定向,输出自然就对应:输出重定向。
输入重定向 | 输出重定向 | |
---|---|---|
标识符 | < | > |
案例 | demo <in.dat | demo >out.dat |
解释说明 | 本质上是使得stdin流表示文件(这里是in.dat)而非键盘 | 本质上是使得stdout流输出数据到out.dat文件中 |
系统默认
重定向
备注:
1:这里要注意的是:demo程序并不会意识到正在从文件in.dat中读取数据,它会认为从stdin获得的任何数据都是从键盘上录入的
2:输入重定向的比喻:比如我们常喝的特仑苏牛奶,公司注册地产的牛奶就是它的stdin,但其他子公司产的牛奶,就是它的重定向。除非特别关注产品说明,一般我们【即demo程序】只认该商品的名称:特仑苏。输出重定向亦是同理。
流与缓冲的关系?
如果有了解计算机的结构,我们都知道内存的访问速度是要优于硬盘的访问速度的。如果我们每次读写数据都是直接访问硬盘,那么速度将会大打折扣,当然这也是内存存在的意义之一。那么,我们先把读入读出数据存入内存中某些区域的过程就是缓冲,内存中的某些区域就是缓冲区域。具体详细过程,建议参考:深入理解计算机系统
形象的比喻:如果你家正在修房子,假设你用背篓去几十公里外的地方背建筑材料回来,让工人为你修建访问,工人估计耍爽了,那么这个速度就是直接从硬盘读取数据;但假如你请了一辆运输车过去,你把材料全部就地放在运输车上,拉回来给工人,那工人的材料就是处于管够的状态,在这里,运输车就是你的缓冲区,这个过程就是缓冲。那这里,其实就存在几点疑问?你这个车是多大的呢?如果只有一个工人的话,你需要缓冲吗?
缓冲的分类
- 全缓冲:进行完整的缓冲
输入流输入:输入的字符被储存到缓冲区,当缓冲区存满时,把储存在缓冲区中的内容传送给程序。
输出流输出:输出的字符被储存到缓冲区,当缓冲区存满时,把储存在缓冲区的内容传送给外设。
- 行缓冲:以行为单位进行缓冲
输入流输入:输入的字符被储存到缓冲区,当读取到换行字符或者缓冲区存满时,把储存在缓冲区中的内容传送给程序。
输出流输出:输出的字符被储存在缓冲区,当写入换行符或缓冲区存满时,把储存在缓冲区中的内容传送给外设。
- 无缓冲:不进行缓冲
输入流输入:条件允许情况下,输入的字符就会从外设直接传递给程序。
输出流输出:条件允许情况下,输出的字符就会直接将内容输出到外设上。
针对这三种缓冲模式,自然就对应有缓冲切换函数(setvbuf/setbuf)
int setvbuf(FILE *stream, char *buf, int mode, size_t size)
void setbuf(FILE *stream, char *buf)
备注:只有在stream指向的流连接到已打开的文件,且对该流进行其他的操作前,才允许调用函数。实际参数mode像下面这样来指定对stream的缓冲方法。
mode:
_IOFBF…对输入输出进行全部缓冲
_IOLBF…对输入输出进行行缓冲
_IONBF…对输入输出不进行缓冲
fflush(stdout)函数
强制刷新(清空)缓冲区中堆积的未输出的字符
int fflush(FILE *stream)
明解C语言【中级篇】相关推荐
- c语言明解课后答案,明解C语言 中级篇 第一章答案
练习1-1 #include #include int main() { srand(time(0)); int anw = rand() % 7; printf("您的签运是:" ...
- 明解C语言入门篇_第12章_结构体
前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...
- 明解C语言入门篇_第9章_字符串的基本知识
前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...
- 明解C语言入门篇_第8章_动手编写各种程序吧
前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...
- 明解C语言入门篇_第10章_指针
前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...
- 明解C语言入门篇_第4章_程序的循环控制
前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...
- 明解C语言入门篇_第13章_文件处理
前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...
- 明解C语言入门篇_第7章_基本数据类型
前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...
- 明解C语言入门篇_第6章_函数
前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...
- 明解C语言 入门篇 第七章练习题
明解C语言 入门篇 第七章练习题 7-1 7-2 7-3 7-4 7-5 7-6 7-7(问题已解决) 7-8 7-9 7-10(此处借鉴了@野猪力量的代码) 7-11 7-1 #include &l ...
最新文章
- 文件标识符必须为双精度类型的整数值标量_【翻译】VTK官方文档 - vtk文件格式
- The substring() Method in JDK 6 and JDK 7 (jdk6中的substring()会造成内存泄漏)
- 【编程】不同编程语言的用处(图解)
- ElasticSearch 小记
- Android Notification通知详解
- php 封装一个sdk,PHP 之微信JSSDK类封装
- 玩转JavaScript OOP[0]——基础类型
- stomp+websocket 集群问题_手把手搭建WebSocket多人在线聊天室
- html显示等宽字体
- CONCAT不是可以识别的内置函数名称。
- 标准焦距;焦距与景深的关系
- centos 确定cpu是arm 还是x86_x86,I386,i686, x86_64, x64,amd64、Windows Linux AIX下查看CPU位数和操作系统位数、rpm包名...
- 路径算法:遗传算法 (Genetic Algorithm, GA)
- 臭打游戏的看过来!Windows 11 22H2 这波加强直接起飞
- 悟空问答死于知乎十周年
- 面试:WebSocket相关
- html+播放ftp,迅雷看看播放器3.1 直接播放Http/Ftp的影音文件
- 大学都要学计算机吗,大学要买电脑吗?大学生为什么现在都要标配一台笔记本?...
- 用手机APP的方式实现PLC远程监控
- 大数据分析与应用(中级) 数据预处理与特征工程