1、1刘刘 培培 华华2022-6-322022-6-332022-6-342022-6-35ASCII文件:文件:ASCII码码二进制文件:补码二进制文件:补码占用占用4个字节个字节占用占用2个字节个字节00000111100111012022-6-362022-6-37 磁盘文件磁盘文件 输出输出 输入输入图图10.2 系统对缓冲文件的处理系统对缓冲文件的处理 输入输入 输出输出程序区程序区数据区数据区文件文件缓冲区缓冲区外存外存内存内存2022-6-38typedeftypedef structstruct short level; / short level; /* * 缓冲区满或空的程度
2、缓冲区满或空的程度 * */ / unsigned flags; / unsigned flags; /* * 文件状态标志文件状态标志 * */ / char char fdfd; /; /* * 文件描述符文件描述符 * */ / unsigned char hold; / unsigned char hold; /* * 如无缓冲区不读取字符如无缓冲区不读取字符 * */ / short short bsizebsize; /; /* * 缓冲区的大小缓冲区的大小 * */ / unsigned char unsigned char * *buffer; /buffer; /* * 数据
3、缓冲区的位置数据缓冲区的位置 * */ / unsigned char unsigned char * *curpcurp; /; /* * 指针指针, ,当前的指向当前的指向 * */ / unsigned unsigned istempistemp; /; /* * 临时文件指示器临时文件指示器 * */ / short token; / short token; /* * 用于有效性检查用于有效性检查 * */ / FILEFILE; ; /* 文件结构类型名 */2022-6-392022-6-3102022-6-3112022-6-312” ”:只读方式只读方式 为读为读( (输入输
4、入) )文本文件打开文件。若文件不存在,文本文件打开文件。若文件不存在,返回返回。”:只写方式只写方式 为写为写( (输出输出) )文本文件打开文件。若文件不存在,文本文件打开文件。若文件不存在,则建立一个新文件;若则建立一个新文件;若,则,则。” ”:追加方式追加方式 为写为写( (输出输出) )文本文件打开文件。若文本文件打开文件。若,则则原来文件的原来文件的,将新的数据,将新的数据到原来数据到原来数据的的;若文件不存在,则返回;若文件不存在,则返回。2022-6-313”:只读方式只读方式 为读为读( (输入输入) )二进制文件打开文件。若文件不存在,二进制文件打开文件。若文件不存在,返
5、回返回。”:只写方式只写方式 为写为写( (输出输出) )二进制文件打开文件。若文件不存在,二进制文件打开文件。若文件不存在,则建立一个新文件;若则建立一个新文件;若,则,则。”:追加方式追加方式 为写为写( (输出输出) )二进制文件打开文件。若二进制文件打开文件。若,则则原来文件的原来文件的,将新的数据,将新的数据到原来数据的到原来数据的;若文件不存在,则返回;若文件不存在,则返回。2022-6-3142022-6-3152022-6-3162022-6-317系统定义的文本文件结系统定义的文本文件结束标志,其值为束标志,其值为 (-1)。 2022-6-3182022-6-319【例【例
6、8.1】利用利用fputc和和fgetc函数建立一个文本文件,并显示文函数建立一个文本文件,并显示文件中的内容。件中的内容。#include main( ) FILE *fp; /* 定义一个文件指针变量定义一个文件指针变量fpfp */ int c; /* c为存放字符的变量为存放字符的变量 */ char filename40; /* filename用于存放数据文件名用于存放数据文件名 */ coutfilename: ; /* 提示输入磁盘文件名提示输入磁盘文件名 */ gets(filename); if (fp=fopen(filename,w)=NULL) coutCant op
7、en the filenameendl; exit(0); 测试打开文件测试打开文件是否成功是否成功2022-6-320while (c=getchar( )!=EOF) /*键盘文件结束标志:输入键盘文件结束标志:输入Ctrl+z,显示显示Z后回车后回车*/ putc(c, fp); /* 将键盘输入的字符写到文件中将键盘输入的字符写到文件中 */fclose(fp); /* 建立文件结束,关闭文件建立文件结束,关闭文件 */coutoutfile:“endl;fp=fopen(filename,r); /* 以读方式打开文本文件以读方式打开文本文件 */while (c=getc(fp)!=EOF) /* 未读到文件结束标志时未读到文件结束标志时 */ putchar(c); /* 在显示器显示读出的字符在显示器显示读出的字符 */fclose(fp); /* 读文件结束,关闭文件读文件结束,关闭文件 */2022-6-3212022-6-322