20191305李天琦第九章学习笔记

20191305第九章学习笔记

I/O库函数

摘要

本章讨论了I/O库函数;解释了I/O库函数的作用及其相对于系统调用的优势;使用示例程序来说明I/O库函数和系统调用之间的关系,并解释了它们之间的相似性和基本区别;详细介绍了I/O库函数的算法,包括fread、fwrite和fclose的算法,重点介绍了它们与read、write和close系统调用的交互;介绍了I/O库函数的不同模式,包括字符模式、行模式、结构化记录模式和格式化I/O操作;阐述了文件流缓冲方案,并通过示例程序说明了不同缓冲方案的效果;阐释了有不同参数的函数以及如何使用stdarg宏访问参数。

9.1 I/O库函数

系统调用是文件操作的基础,但它们只支持数据块的读/写。实际上,用户程序可能希望以最适合应用程序的逻辑单元读/写文件,如行、字符、结构化记录等,而系统调用不支持这些逻辑单元。I/O库函数是一系列文件操作函数,既方便用户使用,又提高了整体效率。

9.2 I/O库函数与系统调用

I/O库函数建立在系统调用的基础上。

系统调用函数: open()、read()、write()、Iseek()、close();

I/O库函数: fopen()、fread()、fwrite()、fseek()、fclose()。

在理想世界中可以使用“真实随机”的数据,但是现实世界并不是理想的,真实随机的数据非常难以找到。

文件流缓冲

每个文件流都有一个FILE结构体,其中包含一个内部缓冲区。对文件流进行读写需要遍历FILE结构体的内部缓冲区。文件流可以使用三种缓冲方案中的一种。

无缓冲

从非缓冲流中写入或读取的字符将快单独传输到文件或从文件中传输。

行缓冲

遇到换行符时,写人行缓冲流的字符以块的形式传输。

全缓冲

写入全缓冲流或从中读取的字符以块大小传输到文件或从文件传输。

文件操作都有什么?

文件的读写

(1)打开(建立)文件:一个文件必须先打开或建立后才能使用;

(2)进行读、写操作:把内存中的数据传输到相关联的外部设备并作为文件存放的操作叫做写数据;把数据文件中的数据传输到内存中的操作叫做读数据。

二进制文件

概念:以二进制方式保存文件,以字节数来定位数据,没有固定的格式,允许程序按所需的任何方式组织和访问数据,对文件中的各个字节数据进行存取访问和改变。二进制文件不能用普通的字处理软件进行编辑,但占用的空间较小。

二进制文件的操作与随机文件类似,区别在于二进制文件的访问单位是字节,而随机文件的访问单位是记录。

任何类型的文件(顺序文件或随机文件)都可以使用二进制访问模式打开。二进制存取可以获取任何一个文件的原始字节。

打开二进制文件

open文件名 For Binary As[#]文件号

以二进制方式打开的文件既可以读也可以写,如果文件不存在,则新建文件。

写二进制文件

PUT[#]文件号,[写位置],表达式。

将表达式的内容写入文件中,一次写入的长度等于表达式的长度。指定数据要写入文件中的位置从开头以字节为单位计算,若省略位置信息,则紧接上一次写作的位置写入。若尚未读写,则从文件头开始写。

读二进制文件

Get[#]文件号,[读位置],变量名。

将一个已打开的二进制文件的指定位置上长度等于变量长度的内容读取到变量中,然后指针移动变量长度。读位置从文件开头以字节为单位指定数据在文件的位置。若省略位置信息,则紧接上一次操作的位置开始读。若尚未读写,则从文件头开始读入。

二进制文件和文本文件的转换:

vim -b 文件名

:%!xxd ——转化成十六进制、然后进行修改

:%!xxd -r——转化成二进制

wq

posted @ 2021-09-19 17:04  20191305李天琦  阅读(51)  评论(0编辑  收藏  举报