什么是 seek 函数?
seek 函数用于在文件或数据流中移动读写指针的位置。
它是文件 I/O 操作中的基础功能,广泛应用于 C、C++、Python 等编程语言中。
通过 seek,程序可以高效地跳转到文件任意位置进行读取或写入。
常见语言中的 seek 实现
C 语言(fseek)
#include <stdio.h>
int main() {
FILE *fp = fopen("example.txt", "r");
if (fp) {
fseek(fp, 10, SEEK_SET); // 从文件开头跳转10字节
// ... 读取操作
fclose(fp);
}
return 0;
}
Python(file.seek)
with open('example.txt', 'rb') as f:
f.seek(10) # 跳转到第10字节
data = f.read(5) # 读取接下来的5字节
seek 的偏移基准
SEEK_SET(或 0):从文件开头开始计算SEEK_CUR(或 1):从当前指针位置开始计算SEEK_END(或 2):从文件末尾开始计算
不同语言可能使用不同名称,但逻辑一致。
应用场景
- 随机访问大文件(如日志分析、数据库存储引擎)
- 跳过文件头(如解析二进制格式、图像/音频元数据)
- 实现文件回滚或重试机制
- 高效处理结构化数据(如 CSV、自定义二进制协议)
注意事项
使用 seek 时需注意:
- 文本模式下某些系统对
seek有限制(建议用二进制模式) - 对管道、网络流等非可寻址流调用
seek可能失败 - 多线程环境下需同步文件指针操作