文件有asii文件(文本文件)和二进制文件。
标准文件io带缓存,写满缓冲区后写向文件数据区。
文件的申明
typedef struct
{
short level;//缓冲区满空程度
unsigned flag;//文件状态标志
char fd;//文件描述符
unsigned char *buffer;//数据缓冲区位置
unsigned char *curp;//指针当前指向
unsigned istemp;//临时文件指示器
short token;//有效性检查
}FILE;
文件打开fopen
FILE *fopen(const char *path, const char *mode);
path 文件名
mode “r”(“rt”)只读,”w”只写(不存在创建),”a”追加,”rb”,”wb”,”ab”,
“r+”(“rt+”),”w+”,”a+”,”rb+”二进制读写,”wb+”,”ab+”
关闭文件fclose
int fclose(FILE *stream);
成功返回0,错误返回EOF(-1);
读写字符fgetc,fputc
int fgetc(FILE *stream);//从文件读取一个字符
int fputc(int c, FILE *stream);//输出一个字符到文件
错误返回EOF
成功返回字符
读写字符串fgets,fputs
char *fgets(char *s, int size, FILE *stream);//读取size或一行字符串
int fputs(const char *s, FILE *stream);//字符串写到文件
格式化读写fscanf,fprintf
int fscanf(FILE *stream, const char *format, …);//从文件格式化读取
int fprintf(FILE *stream, const char *format, …);//格式化写入
读取完毕返回EOF
注:文件指针在参数列表开始,其他几个在最后
二进制读写fread,fwrite
/二进制读取/
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
/二进制写入/
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
注:结束判断需要用feof()函数
随机读写fseek,ftell
int fseek(FILE *stream, long offset, int whence);
offset:正数往后移,负数往前移
whence:文件开始位置 SEEK_SET
文件当前位置 SEEK_CUR
文件末尾位置 SEEK_END
long ftell(FILE *stream);//获取当前位置
循环读取和结束判断函数feof
int feof(FILE *stream);
未结束返回0
(最后多出来的不知道什么鬼)