文档章节

C Primer Plus 第13章 文件输入/输出 13.6 标准I/O内幕

idreamo
 idreamo
发布于 2017/02/21 05:57
字数 736
阅读 55
收藏 0

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

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

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

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

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

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

© 著作权归作者所有

idreamo
粉丝 18
博文 139
码字总数 224743
作品 0
青岛
产品经理
私信 提问
C Primer Plus(5版)第8章编程题1_重定向实现

小伙伴们,对C语言编程有疑问的,可以加微信交流:poo_poo或者扫描我的头像,验证时请注明是“知友” 一、题目描述 本题是第8章编程题的第一道题,题目如下: 二、题目及思路分析 从题述来看...

石家的鱼
2017/07/11
0
0
C Primer Plus 第8章 字符输入/输出和输入确认 8.3 重定向和文件

输入和输出涉及到函数、数据和设备。例如,考虑echo_eof.c程序。该程序使用了输入函数getchar()、输入设备(我们已经假设)是键盘,输入数据流由单独的字符组成。假设您希望保持相同的输入函...

idreamo
2016/06/28
174
0
C Primer Plus 第8章 字符输入/输出和输入确认 8.3 终止键盘输入

8.3.1 文件、流和键盘输入 文件是一块存储信息的存储器区域。通常,文件被保存在某种类别的永久存储器上,例如软盘、硬盘或磁盘。 具有强大、灵活等特点的C语言具有许多打开、读取、写入和关...

idreamo
2016/06/27
56
0
《返璞归真--UNIX技术内幕》--前言

前 言 自计算机诞生以来,产生了数以百计的操作系统,但这其中,无疑以UNIX最具有生命力,流派也最广。虽然在个人电脑上,Windows占据了绝大多数用户,但在服务器领域,UNIX依然是一枝独秀。...

nothingfinal
2012/03/31
0
0
C Primer Plus (第六版) 中文版 随手笔记(七)

版权声明: https://blog.csdn.net/qq_38351824/article/details/80073244 声明:本篇文章只是个人知识盲区、知识弱点、重点部分的归纳总结,望各位大佬不喜勿喷。梳理顺序是按照书籍的实际顺...

sumjess
2018/04/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

python学习10.04:Python list列表使用技巧及注意事项

前面章节介绍了很多关于 list 列表的操作函数,细心的读者可能会发现,有很多操作函数的功能非常相似。例如,增加元素功能的函数有 append() 和 extend(),删除元素功能的有 clear()、 remo...

太空堡垒185
12分钟前
2
0
新手插画学习的方法?教你如何自学?

插画学习的方法?教你如何自学? 从小喜欢画一些漫画头像随笔画,但是其实没有基础。个人偏好小清新手绘风的插画(如下图),每每看到都希望自己能画出这样的作品。 我其实很想说画这种美术功...

huihuajiaocheng
18分钟前
3
0
面试题

1、实现clone();

gtandsn
29分钟前
3
0
CentOS 7 部署 tesseract-ocr

官方地址 github yum-config-manager --add-repo https://download.opensuse.org/repositories/home:/Alexander_Pozdnyakov/CentOS_7/ 若提示 yum-config-manager: command not found 执行以......

阿白
29分钟前
2
0
JAVA比较器中comparator的使用

一个专用的比较器Comparator Comparator是一个专用的比较器,当一个不支持自比较或者自比较函数不能满足要求时,可写一个比较器来完成两个对象之间大小的比较。Comparator体现了一种策略模式...

daxiongdi
30分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部