欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CP第13章

程序员文章站 2022-07-12 18:58:56
...

第13章 文件输入/输出

本章介绍以下内容:
函数:fopen()、getc()、putc()、exit()、fclose()
fprintf()、fscanf()、fgets()、fputs()
rewind()、fseek()、ftell()、fflush()
fgetpos()、fsetpos()、feof()、ferror()
ungetc()、setvbuf()、fread()、fwrite()
如何使用C标准I/O系列的函数处理文件
文件模式和二进制模式、文本和二进制格式、缓冲和无缓冲I/O
使用既可以顺序访问文件也可以随机访问文件的函数
文件是当今计算机系统不可或缺的部分。文件用于储存程序、文档、数据、书信、表格、图形、照片、视频和许多其他种类的信息。作为程序员,必须会编写创建文件和从文件读写数据的程序。本章将介绍相关的内容

13.1 与文件进行通信

13.4 文件I/O:fprintf()、fscanf()、fgets()和fputs()c

(fscanf(stdin, "%40s", words) == 1) && (words[0] != '#')
fgets(buf, STLEN, fp);
fputs(buf, fp);
13.5.1 fseek()ftell()的工作原理
ftell(fp);//返回当前位置
fseek(fp, 0L, SEEK_SET); // 定位至文件开始处
fseek(fp, 10L, SEEK_SET); // 定位至文件中的第10个字节
fseek(fp, 2L, SEEK_CUR); // 从文件当前位置前移2个字节
fseek(fp, 0L, SEEK_END); // 定位至文件结尾
fseek(fp, -10L, SEEK_END); // 从文件结尾处回退10个字节
13.5.4 fgetpos()fsetpos()函数
    ANSI C新增了两个处理较大文件的新定位函数:fgetpos()fsetpos()

小结

对于大多数C程序而言,写入文件和读取文件必不可少。为此,绝大对数C实现都提供底层I/O和标准高级I/O。因为ANSI C库考虑到可移植性,包含了标准I/O包,但是未提供底层I/O。
标准 I/O 包自动创建输入和输出缓冲区以加快数据传输。fopen()函数为标准 I/O 打开一个文件,并创建一个用于存储文件和缓冲区信息的结构。fopen()函数返回指向该结构的指针,其他函数可以使用该指针指定待处理的文件。feof()和ferror()函数报告I/O操作失败的原因。
C把输入视为字节流。如果使用fread()函数,C把输入看作是二进制值并将其储存在指定存储位置。如果使用fscanf()、getc()、fgets()或其他相关函数,C则将每个字节看作是字符码。然后fscanf()和scanf()函数尝试把字符码翻译成转换说明指定的其他类型。例如,输入一个值23,%f转换说明会把23翻译成一个浮点值,%d转换说明会把23翻译成一个整数值,%s转换说明则会把23储存为字符串。getc()和 fgetc()系列函数把输入作为字符码储存,将其作为单独的字符保存在字符变量中或作为字符串储存在字符数组中。类似地,fwrite()将二进制数据直接放入输出流,而其他输出函数把非字符数据转换成用字符表示后才将其放入输出流。
ANSI C提供两种文件打开模式:二进制和文本。以二进制模式打开文件时,可以逐字节读取文件;以文本模式打开文件时,会把文件内容从文本的系统表示法映射为C表示法。对于UNIX和Linux系统,这两种模式完全相同。
通常,输入函数getc()、fgets()、fscanf()和fread()都从文件开始处按顺序读取文件。然而, fseek()和ftell()函数让程序可以随机访问文件中的任意位置。fgetpos()和fsetpos()把类似的功能扩展至更大的文件。与文本模式相比,二进制模式更容易进行随机访问。
相关标签: C