- fseekANSI C函数:使用fseek可以实现文件FILE*的随机访问
int fseek(FILE *stream, long offset, int mode);注:本篇只讨论在“读”文件时候的随机访问技术参数
stream: 文件指针
offset: 一个整数,表示偏移值
mode : 相对位置
返回值
0,操作成功;-1,操作失败跳到第100个字节的位置
fseek(fp, 100, SEEK_SET);跳到倒数100字节的位置
fseek(fp, 100, SEEK_END);跳到当前位置往前100个字节
fseek(fp, -100, SEEK_CUR);
跳到当前位置往后100个字节
fseek(fp, 100, SEEK_CUR);
什么叫“当前位置”??
文件位置指示器 file-offset indicator
每个被打开的文件对象FILE*,其数据结构里都有一个位置指示器,表示当前的读/写位置。(当前位置到文件头的距离)
当fopen打开文件时,位置指示器的值为0
当fread读取字节时,位置指示器的值会增加相应的字节数
例如,读取128个字节,则位置指示器的值就增加 128,继续fread,则继续增加
当fseek时,会调整位置指示器的值
例如,fseek(fp, 100, SEEK_SET)则位置 指示器的值被设定为100。fseek(fp, 100, SEEK_END)则指示器的值为filesize-100。
举例:
文件中按字节保存了100个struct对象的数据,每个对象使用了字节数是一样的。
读第80个对象的数据
Student stu;
fseek(fp, 79* sizeof(Student), SEEK_SET);
fread(&stu, 1, sizeof(Student), fp);