文件的输入与输出
所学函数:fseek(); ftell(); setvbuf(); ungetc(); fflush(); fread(); fwrite(); feof(); ferror();
随机存取:fseek()与ftell()
fseek(被搜索文件的FILE指针,偏移量(long类型),文件起始点模式);
文件起始点模式:
SEEK_SET 文件开始
SEEK_CUR 当前位置
SEEK_END 文件结尾
调用函数的例子
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个字节
ftell(文件指针);返回文件的当前位置.(用于得到文件位置指针当前位置相对于文件首的偏移字节数)//只能读取较小的字节数(long类型)(该函数对大于231-1文件,即:2.1G以上的文件操作时可能出错。)
long a=ftell(fp);
int ungetc(int c,FILE *fp)函数将c指定的字符放回输入流中。
int fflush(FILE *fp);
int setvbuf(FILE *restrict fp, char *restrict buf, int mode, size_t size);
此函数建立一个标准I/O函数使用的替换缓冲区。
mode类型:
_IOFBF(完全缓冲,缓冲区满的时候刷新)
_IOLBF(行缓冲,缓冲区满的时候或者一个新行写入的时候刷新)
_IONBF(无缓冲)
fwrite()函数
size_t fwrite(const void *restrict ptr, size_t size, size_t nmemb, FILE *restrict fp);
fwrite(要写入数据块的地址,数据块大小,数据块数目,要写入的文件);
char buffer[256];
fwrite(buffer,sizeof(double),10,fp);//分10个数据块
fread()函数
size_t fread(void *restrict ptr,size_t size,size_t nmemb,FILE *restrict fp);
使用这一函数来读取通过fwrite()写入的文件数据。如:
double earning[10];
fread(earning.sizeof(double),10,fp);//将10个double复制到数组
int feof(FILE *fp);//检测文件尾,成功返回非0值
int ferror(FILE *fp);//发生读写错误返回非0值