SEEK_SET 是什么?

SEEK_SET 是 C/C++ 标准库中 fseek 函数的定位基准常量,表示从文件开头开始计算偏移。alongside SEEK_CUR(当前位置)和 SEEK_END(文件末尾)。

一、fseek 原型

int fseek(FILE *stream, long offset, int whence);
  • stream:文件指针。
  • offset:偏移字节数。
  • whence:基准,可为 SEEK_SET、SEEK_CUR、SEEK_END。

二、SEEK_SET 的用法

FILE *fp = fopen("data.txt", "r");
fseek(fp, 10, SEEK_SET);  // 跳到第 10 个字节
char buf[100];
fgets(buf, sizeof(buf), fp);

三、常见误区

  • offset 为负数时 SEEK_SET 行为未定义,应避免。
  • 文本文件中 SEEK_SET 的偏移按字节算,多字节编码(如 UTF-8)下可能切在字符中间。
  • 文件打开模式为 "a"(追加)时,fseek 行为受限。

四、与 ftell 配合

fseek(fp, 0, SEEK_END);
long size = ftell(fp);
fseek(fp, 0, SEEK_SET);  // 回到开头

这是获取文件大小的经典写法。