文件的缓冲区:

每一个被使用的文件都在内存中用一个FILE结构体来存储相应的文件信息(如文件的名字、文件的状态、文件当前位置等)。FILE的定义在stdio.h中
typedef struct
{
short level; //缓冲区“满”的程度
unsigned flags; //文件状态标志
char fd;//文件描述符
unsigned char hold;//如缓冲区无内容不读取字符
short bsize;//缓冲区的大小
unsigned char* buffer;//缓冲区位置
unsigned char* curp;//指针当前的指向
unsigned istemp; //临时文件指示器
short token; //用于有效性检查
}FILE;
注:不同的编译器的FILE类型略有不同。例如,VC6.0中
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
一般使用文件类型指针,FILE* fp(注:它指向内存中的文件信息区(即FILE)的开头,而不是指向外部介质上的数据文件的开头)。
FILE* fp;
fp = fopen("test.txt","w");//以只写的方式打开文件
...
fclose(fp);//关闭文件
| 文件打开方式 | 若指定文件不存在 |
| "r"(只读) | 出错 |
| "w"(只写) | 建立新文件 |
| "a"(追加) | 出错 |
| "rb"(二进制文件的只读) | 出错 |
| "wb"(二进制文件的只读) | 建立新文件 |
| "ab"(二进制文件的追加) | 出错 |
| "r+"(读写) | 出错 |
| "w+"(读写) | 建立新文件 |
| "a+"(读写) | 出错 |
| "rb+"(二进制文件的读写) | 出错 |
| "wb+"(二进制文件的读写) | 建立新文件 |
| "ab+"(二进制文件的读写) | 出错 |
注:加b的表示对二进制文件操作,默认(不加b)对文本文件操作。
常用下面的方法打开一个文件
if((fp=fopen("filename","r"))==NULL)
{
printf("打开文件失败!");
exit(0);
}
向文件读写
| fgetc(fp) | 从fp指向的文件读入一个字符 | 成功,返回读到的字符,失败返回文件结束标志EOF(即-1) |
| fput(ch, fp) | 把字符ch写到文件中去 | 成功,返回写入的字符,失败返回EOF |
| fgets(char* str, int n, FILE* fp) | 从文件读入一个长度为n-1的字符串,存到字符数组str中 | 成功,返回str的地址,失败返回NULL |
| fput(char* str, FILE* fp) | 把字符串str写入文件中 | 成功返回0,失败返回非0 |
原文:https://www.cnblogs.com/htj10/p/10728143.html