目录
根据文件指针的位置和偏移量来定位文件指针,是一个读取函数。
int fseek ( FILE * stream, long int offset, int origin );
在三个参数中,其实最重要的是 int origin 这个参数。
开始偏移的位置,在这个函数中分为三种,分别是:
其中当前所指向的位置,这个说法来自于http://t.csdn.cn/cEqD7中的fgetc的函数内涵

- int main()
- {
- int arr[10] = {0};
- FILE* pf = fopen("data.txt","r");
- if (pf == NULL)
- {
- perror("fopen");
- return 1;
- }
-
- //读文件,并设置变量接收读取的数据
- int ch = fgetc(pf);
- //打印读取的数据
- printf("%c\n",ch);
-
- fclose(pf);
- pf = NULL;
- return 0;
- }

解读: 更具fgetc的特性,一次只能读取一个字符,所以当前读取的只能是字符a,并且当准备使用fgetc再次读取时,会读取下一个字符b,因为fgetc内部会设置一个指针专门用来读取字符的。
- int main()
- {
- int arr[10] = {0};
- FILE* pf = fopen("data.txt","r");
- if (pf == NULL)
- {
- perror("fopen");
- return 1;
- }
-
- //进行读取偏移
- fseek(pf,6,SEEK_SET);
-
- //读文件,并设置变量接收读取的数据
- int ch = fgetc(pf);
- //打印读取的数据
- printf("%c\n",ch);
-
- fclose(pf);
- pf = NULL;
- return 0;
- }
fseek(pf,6,SEEK_SET); 从文件数据开头的位置进行偏移,偏移了6个偏移值。
注意,偏移值是从0开始的,所以应该是七个位置,或者说偏移七个位置抵达偏移值是6的位置。

- int main()
- {
- int arr[10] = {0};
- FILE* pf = fopen("data.txt","r");
- if (pf == NULL)
- {
- perror("fopen");
- return 1;
- }
-
- //进行读取偏移
- fseek(pf,-3,SEEK_END);
-
- //读文件,并设置变量接收读取的数据
- int ch = fgetc(pf);
- //打印读取的数据
- printf("%c\n",ch);
-
- fclose(pf);
- pf = NULL;
- return 0;
- }
fseek(pf,-3,SEEK_END); 从文件数据的未端进行偏移,偏移-3个位置,也就朝左变进行偏移,从左往右的负数偏移值是直接从-1开始。

- int main()
- {
- int arr[10] = {0};
- FILE* pf = fopen("data.txt","r");
- if (pf == NULL)
- {
- perror("fopen");
- return 1;
- }
-
-
- //读文件,并设置变量接收读取的数据
- int ch = fgetc(pf);
- //打印读取的数据
- printf("%c\n",ch);
-
- //进行读取偏移
- fseek(pf,5,SEEK_CUR);
- int ch = fgetc(pf);
- printf("%c\n",ch);
-
- fclose(pf);
- pf = NULL;
- return 0;
-
- }
使用了fgetc的特性,将文件内部指针的位置进行更改,在使用fseek函数中的SEEK_CUR当前位置进行偏移,也就是当前位置的偏移值是0,往后在偏移6个位置,抵达偏移值5的位置。
