博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C Primer Plus 第13章 文件输入/输出 13.6 标准I/O内幕
阅读量:6860 次
发布时间:2019-06-26

本文共 913 字,大约阅读时间需要 3 分钟。

hot3.png

通常使用标准I/O的第一步就是使用fopen()打开一个文件(回忆一下,stdin、stdout、stderr文件却是自动打开的)。fopen()函数不仅 打开一个文件,而且 建立了一个缓区(在读写模式下将建立两个缓冲区),还创建了一个包含文件和缓冲区相关数据的数据结构。不仅如此,fopen()还 返回指向该结构的指针 ,供其他函数知道如何找到该结构。假设把这个值赋给了一个名叫fp的指针变量。我们称fopen()函数打开了一个流。如果文件以文本模式打开,可以得到一个文本流;如果以二进制模式打开,那么就得到一个二进制流。

这个数据结构通常包括一个 文件位置指示器,以确定在流中的当前位置。它还包括错误指示器和文件结尾指示器、一个指向缓冲区起始处的指针、一个文件标识符,和一个记录实际复制到缓冲区中的字节数的计数器。

我们着重考虑文件输入。通常,下一步就是调用stdio.h头文件中声明的某个输入函数,比如scanf()、getc(),或fgets()。调用这些函数中的任意一个,都 会的 把一块数据从文件复制到缓冲区中。缓冲区的大小依赖于具体实现 ,但通常是512字节或者它的倍数。除了填充缓冲区以外,初次函数调用还将设置fp所指的结构中的值。特别地,将设置流的当前位置和复制到缓冲区中的字节数。通常当前位置从字节0开始。

数据结构和缓冲区初始化以后,输入函数将从缓冲区中读取所请求的数据。同时,文件位置指示器被置为紧随最后一个被读取字符的位置。因为stdio.h定义的所有输入函数都使用同一个缓冲区,所以任何一个被调函数都将在前一个任何函数调用停止的地方继续开始。

当输入函数检测 到已经读取了缓冲区中的全部字符时,它会请求系统将下一个缓冲区大小的数据复制到缓冲区。通过这种方式,输入函数可以读入函数中的全部内容,直到文件结尾。函数在读入最后 一缓冲区数据中的最后一个字符 后,会将文件结尾指示器的值设置为真。于是下一个被调用函数将返回EOF。

以类似的方式,输出函数将数据写入到缓冲区。当缓冲区已满时,就将数据复制到文件中。

转载于:https://my.oschina.net/idreamo/blog/842512

你可能感兴趣的文章
oracle中schema指的是什么?
查看>>
【PMP认证考试之个人总结】 第 13 章 PMP计算题汇总
查看>>
Mysql数据库优化配置文件my.ini文件配置解释
查看>>
如何在 Linux 上用 IP转发使内部网络连接到互联网
查看>>
《全网营销与SEO》一第2章 结构化标签的使用
查看>>
两种方式创建你自己的 Docker 基本映像
查看>>
《R语言数据分析》——1.6 导入Excel电子表格
查看>>
《GNS3实战指南》—— 导读
查看>>
《jQuery、jQuery UI及jQuery Mobile技巧与示例》——9.19 技巧:利用JavaScript调用加载页面...
查看>>
界面之下:还原真实的 MVC、MVP、MVVM 模式
查看>>
《OOD启思录》—本书中引用到的其他图书
查看>>
网站建设前要注意这些网站设计误区可能会毁了网站
查看>>
《乐高EV3机器人搭建与编程》一1.2 LEGO系列产品
查看>>
《HTML、CSS、JavaScript 网页制作从入门到精通》——6.3 表格的边框
查看>>
《Spring攻略(第2版)》——1.9 用依赖检查属性
查看>>
并发集合(七)创建并发随机数
查看>>
论文导读:面向卷积神经网络的卷积核冗余消除策略
查看>>
当下流行架构中的一些技术思考
查看>>
Hadoop学习第四天之hadoop命令操作(上)
查看>>
走进阿里云:做云数据、大计算的No.1
查看>>