第十三章 - DDL-Killer/The-road-of-Linxu-Group2024 GitHub Wiki
文件通信
文件是什么
文本模式和二进制模式
I/O级别
- 底层I/O使用操作系统提供的基本I/O服务
- 标准高级I/O使用C库的标准包和stdio.h头文件定义
标准I/O
- 标准I/O有许多专门的函数简化了不同问题
- 输入和输出都是缓冲的
fopen()函数

fclose()函数
- 关闭指定的文件,必要时刷新缓冲区
- 成功关闭,返回0,否则返回EOF
文件I/O:fprintf()、scanf()、fgets()、fputs()
fprintf() fscanf()
fgets() fputs()
- fgets()第一个参数是储存输入位置的地址(char *),第二个参数是整数,表示待输入的字符串的大小,最后一个参数是文件指针,指定待读取的文件,fgets()在末尾加上空字符
- fputs()第一个是字符串的地址,第二个是文件指针,填入时不补充空字符
随机访问:fseek()和ftell()
工作原理
- fseek()第一个参数为FILE指针,第二个参数时偏移量,必须是long类型,第三个参数是模式:文件开始处、当前位置、文件末尾,返回值是0,否则-1
- ftell()返回值long,返回当前位置
标准I/O机理
- 第一步用fopen打开文件
- 创建一个缓冲区以及一个包含文件和缓冲区数据的结构
- fopen返回一个指向该结构的指针
其他标准I/O函数
int ungetc(int c,FILE *fp)函数
int fflush()
- 将输入缓冲区中未写入数据被发送到fp指定的输出文件,称为刷新缓冲区
int setvbuf()
- int setvbuf(FILE * restrict fp, char * restrict buf, int mode, size_t size);
- mode:_IOFBF(完全缓冲),_IOLBF(行缓冲),_IONBF(无缓冲)
- 创建了一个供标准I/O函数替换使用的缓冲区
fwrite()
- size_t fwrite(const void* restrict ptr,size_t size,size_t nmemb,FILE * restrict fp)
- ptr是待写入数据块的地址
- size表示待写入数据块的大小
- nmemb表示待写入数据块的数量
- fp表示待写入的文件
fread()文件
- size_t fread(void * restrict ptr,size_t size,size_t nmene,FILE * restrict fp)
- 待输入换待读取