- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第14章节 文件I.O操作
第14章 文件I/O操作 本章将文件I/O操作分为两部分来讲解,第一部分是非缓冲文件操作,这种操作适合于比较小规模文件的读写和对实时性要求很高的设备的数据通信,这类操作是系统调用提供的;第二部分是缓冲文件操作,所面向的则是大规模非实时性数据处理问题,这类操作是标准输入输出库提供的。 14.1 非缓冲文件操作 非缓冲文件操作是针对于小规模文件的读写,或者是实时设备。执行非缓冲文件操作后,应用程序将立即获取或传送数据。非缓冲文件操作的函数只有两个,分别是read()函数和write()函数,这些函数通过文件标识符找到文件。在介绍这些函数前,首先介绍三个操作系统预先分配的文件标识符: 0,标准输入,即通过终端输入。 1,标准输出,即通过终端输出。 2,标准错误,系统中存放错误信息的堆栈。 14.1.1 使用read()读取文件 read()函数用于从文件中将信息读取到指定的内存区域中,该函数的一般形式是: read(文件标识符, 内存块指针, 内存块长度); 文件标识符可使用open()函数获得,或者使用已系统预先分配的文件标识符。内存块指针用于指定read()函数读取数据的保存位置,内存块长度在read()函数的第3个参数里定义。read()函数的返回值是它实际读取的长度,如果返回值为0,表示它没有读取任何数据,运行错误时则返回1。。 14.1.2 使用write()写入文件 write()函数用于将指定长度的数据写入文件中,该函数的一般形式是: write(文件标识符, 内存块指针, 内存块长度); 函数的返回值是它实际写入的长度,如果返回值为0,表示它没有读取任何数据,运行错误时则返回1。 14.1.3 随机读写文件 open()函数内部有一个隐藏的文件位置指针,该指针指向文件正在读写的位置,在未指定的情况下,该位置处于文件的开始。 14.2 缓冲文件操作 基于缓冲区的文件I/O操作减少了对设备的物理数据接口访问次数,从而使大量数据的I/O操作的系统开支减少,并将实际读写速度提升。标准输入输出库定义了文件流结构指针FILE*作为文件的标识,同时提供了一系列缓冲文件操作函数。有三个文件流是系统预定义的,分别是: stdin,标准输入。 stdout,标准输出。 dtderr,标准错误。 14.2.1 打开与关闭文件流 打开文件流操作的函数是fopen(),该函数与系统调用函数open()的作用相似,它主要用于文件和终端的输入输出方面,所以并不能对文件权限进行操作。 14.2.2 读取与写入文件流 读取文件流可使用函数fread(),该函数的一般形式是: fread(缓冲区指针, 长度, 数量, 文件流指针); 写入文件流可使用函数fwrite(),该函数的形式与fread()相同。这两个函数不适用于操作结构化数据的场合,例如操作数据库中的表,原因是fwrite()函数写的文件可能无法在不同硬件平台之间移植。 14.2.3 文件流的格式化输入与输出 标准输入输出库里提供了文件流的格式化输入输出函数fscanf()和fprintf(),这两个函数的用法与scanf()和printf()函数极为相似。这两个函数的一般形式是: scanf(文件流指针, 控制字符串, 输入项列表); fprintf(文件流指针, 控制字符串, 输出项列表); 文件流的格式化输入和输出并没有要求指定缓冲区位置,但这并不代表他们不使用缓冲区。fscanf()和fprintf()函数缓冲区的位置和每次读取数据的长度由编译器指定。 14.2.4 文件流的定位操作 文件流结构中有一个指针指向正在读写文件数据的位置,在操作文件流时,可通过调整该指针的对文件的指定位置进行操作。在标准输入输出库里函数fseek()与系统调用函数seek()的定义方法和使用方法几乎一致,只是fseek()函数的第一个参数是文件流指针。 14.2.5 文件流操作的其他函数 除了前面所讲解的这些函数以外,标准输入输出库还为文件流操作提供了其他一些不太常用的函数,这些函数见表14.4所示。 14.2.6 文件流操作的错误处理 在C语言中,很多函数都使用标准输入输出库中定义的全局变量errno保存错误代码。当文件流操作进行到文件末尾时,也会通过errno变量保存一个信息,这个信息是标准输入输出库中定义的常量EOF。除此以外,其他文件流操作的错误也会保存在这个变量中。 14.3 媒体播放器——完善播放列表 在第8章实例中曾设计过简单的播放列表,但该播放列表不能直接用在媒体播放器中,必须对其进行改写。播放列表可直接利用媒体库链表的数据结构,这样也便于代码复用,而且更容易实现将媒体库中选择的文件添加到播放列表功能。程序中的播放列表数据结构播放列表通常被保存为文件,本节将介绍
您可能关注的文档
最近下载
- 高甘油三酯血症性急性胰腺炎诊治急诊专家共识2021解读.pptx
- 15J401 钢梯(建筑图集).docx
- 《精神分裂症治疗前后烟酸皮肤反应的变化及其与症状功能的关系》.docx
- 2023年厦门大学嘉庚学院软件工程专业《计算机组成原理》科目期末试卷B(有答案).docx VIP
- 2025年机动车检测站管理评审.doc VIP
- 中标麒麟高级服务器操作系统软件技术指标.pdf VIP
- 2022年厦门大学嘉庚学院软件工程专业《计算机组成原理》科目期末试卷B(有答案).docx VIP
- 2023中标麒麟桌面操作系统软件(龙芯版)V7.0-用户手册.docx VIP
- 2021年厦门大学嘉庚学院软件工程专业《计算机组成原理》科目期末试卷B(有答案).pdf VIP
- 中标麒麟桌面操作系统.pdf VIP
文档评论(0)