明解C语言【中级篇】 学习记录

Chapter 09: 文件处理

明解C语言【中级篇】

  • 明解C语言【中级篇】 学习记录
    • **Chapter 09:** 文件处理
  • 前言
  • 流(stream)
  • 流与缓冲的关系?

前言

记录学习明解C语言【中级篇】的部分章节,作为知识总结,方便回阅翻看。


Chapter 9-1 标准流
本节结构:


流(stream)

  1. 定义

      在C语言中,术语流表示任意输入的源或任意输出的目的地。-----------------解释:什么是源和目的地?通过键盘输入,屏幕输出的小程序中,键盘和屏幕就是**流**,键盘就是输入的源,屏幕就是输入的目的地。
    
  2. 分类

标准流

文件指针 默认含义
stdin 标准输入 键盘
stdout 标准输出 屏幕
stderr 标准错误 屏幕

备注:
文件指针:用于存放文件首地址的指针,用于对流进行访问。
stdin/stdout/stderr:它们是FILE *类型的对象,它们都是常量,分别指向键盘、显示器、显示器。默认配置情况下,c程序启动时,系统会自动打开这三个文件【参照Linux系统】。


  1. 重定向
    既然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语言【中级篇】相关推荐

  1. c语言明解课后答案,明解C语言 中级篇 第一章答案

    练习1-1 #include #include int main() { srand(time(0)); int anw = rand() % 7; printf("您的签运是:" ...

  2. 明解C语言入门篇_第12章_结构体

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  3. 明解C语言入门篇_第9章_字符串的基本知识

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  4. 明解C语言入门篇_第8章_动手编写各种程序吧

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  5. 明解C语言入门篇_第10章_指针

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  6. 明解C语言入门篇_第4章_程序的循环控制

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  7. 明解C语言入门篇_第13章_文件处理

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  8. 明解C语言入门篇_第7章_基本数据类型

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  9. 明解C语言入门篇_第6章_函数

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  10. 明解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 ...

最新文章

  1. 文件标识符必须为双精度类型的整数值标量_【翻译】VTK官方文档 - vtk文件格式
  2. The substring() Method in JDK 6 and JDK 7 (jdk6中的substring()会造成内存泄漏)
  3. 【编程】不同编程语言的用处(图解)
  4. ElasticSearch 小记
  5. Android Notification通知详解
  6. php 封装一个sdk,PHP 之微信JSSDK类封装
  7. 玩转JavaScript OOP[0]——基础类型
  8. stomp+websocket 集群问题_手把手搭建WebSocket多人在线聊天室
  9. html显示等宽字体
  10. CONCAT不是可以识别的内置函数名称。
  11. 标准焦距;焦距与景深的关系
  12. centos 确定cpu是arm 还是x86_x86,I386,i686, x86_64, x64,amd64、Windows Linux AIX下查看CPU位数和操作系统位数、rpm包名...
  13. 路径算法:遗传算法 (Genetic Algorithm, GA)
  14. 臭打游戏的看过来!Windows 11 22H2 这波加强直接起飞
  15. 悟空问答死于知乎十周年
  16. 面试:WebSocket相关
  17. html+播放ftp,迅雷看看播放器3.1 直接播放Http/Ftp的影音文件
  18. 大学都要学计算机吗,大学要买电脑吗?大学生为什么现在都要标配一台笔记本?...
  19. 用手机APP的方式实现PLC远程监控
  20. 大数据分析与应用(中级) 数据预处理与特征工程

热门文章

  1. php和jsp有什么区别,php和jsp之间的区别是什么
  2. Word基础(八)带圈字符
  3. sql安装过程中,为 SQL Server 代理服务提供的凭据无效。若要继续操作,请为 SQL
  4. jeb安装教程_JEB2插件教程之一
  5. 3.5 数值分析: 例题及迭代法收敛的充分条件
  6. 在Microsoft Office 2007中检测和修复应用程序
  7. 京东把 Elasticsearch 到底用的有多牛?日均5亿订单查询完美解决!
  8. Git 的下载、安装、本地环境配置教程
  9. sublime安装livereload插件过程
  10. 苹果CMSV10如何打包麻花影视APP教程