跳转到内容

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 的文件。文件的长度是通过寻址到文件末尾,然后读取文件指针的位置来确定的。

[编辑 | 编辑源代码]
华夏公益教科书