C 编程/stdio.h/fseek
外观
fseek 是 C 语言标准库中的一个函数,包含在 stdio.h 文件中。它的作用是改变指定流的文件位置指示器。由于 fseek 在许多平台上使用 32 位值,因此它最多只能进行 2 千兆字节的寻址。对于更大的偏移量,可以使用 fseeko64。
int fseek(FILE *stream_pointer, long offset, int origin);
fseek 函数将与流关联的文件指针移动到一个新的位置,该位置距离 origin 偏移字节数。
参数含义
- stream_pointer 是指向流 FILE 结构的指针,该结构的文件位置指示器应该被改变;
- offset 是一个 long 整数,它指定文件位置指示器应该放置在距离 origin 多少字节的地方;
- origin 是一个整数,它指定原点位置。它可以是
- SEEK_SET: 原点是流的开头
- SEEK_CUR: 原点是当前位置
- SEEK_END: 原点是流的末尾
返回值是一个 integer,表示
- 0 (零) : 函数在流中成功执行
- 非零 : 发生错误
- 在无法进行寻址的设备上,返回值是未定义的。
请注意,每个错误号都有不同的含义。可以通过检查 errno.h 来了解含义。
#include <stdio.h>
int main(int argc, char **argv) {
FILE *file_handle;
long int file_length;
file_handle = fopen("file.bin","rb");
if(fseek(file_handle, 0, SEEK_END)) {
puts("Error while seeking to end of file");
return 1;
}
file_length = ftell(file_handle);
if (file_length < 0) {
puts("Error while reading file position");
return 2;
}
printf("File length: %d bytes\n", file_length);
fclose(file_handle);
return 0;
}
这段程序代码以只读模式打开名为 file.bin 的文件。文件的长度是通过寻址到文件末尾,然后读取文件指针的位置来确定的。