fseek 是C标准库中用于设置文件位置指针的函数,定义在 <stdio.h> 头文件中。它允许随机访问文件中的任意位置。
函数原型
int fseek(FILE *stream, long offset, int origin);
参数说明
1. stream 参数
类型:FILE*
含义:指向已打开文件的指针,通常由 fopen() 返回
2. offset 参数
类型:long
含义:从 origin 指定的位置开始的偏移量(以字节为单位)
-
- 可以是正数(表示向前移动)或负数(表示向后移动)
- 零表示不移动
3. origin 参数
- 类型:
int - 含义:偏移的基准位置,可以是以下三个宏之一:
|
宏定义 |
值 |
含义 |
|
|
0 |
文件开头 |
|
|
1 |
当前文件位置指针的位置 |
|
|
2 |
文件末尾 |
返回值
- 成功:返回0
- 失败:返回非零值(通常是-1)
使用示例
1. 移动到文件开头
fseek(file, 0L, SEEK_SET); // 移动到文件开始处
2. 向前移动100字节
fseek(file, 100L, SEEK_CUR); // 从当前位置向前移动100字节
3. 获取文件大小(移动到末尾并获取位置)
fseek(file, 0L, SEEK_END); // 移动到文件末尾
long file_size = ftell(file); // 获取当前位置(即文件大小)
fseek(file, 0L, SEEK_SET); // 移回文件开头
4. 向后移动50字节
fseek(file, -50L, SEEK_CUR); // 从当前位置向后移动50字节
注意事项
- 二进制文件与文本文件:
-
- 对于二进制文件,
offset精确对应字节数 - 对于文本文件,
offset必须为0或ftell()返回的值
- 对于二进制文件,
- 大文件支持:
-
- 标准
fseek()使用long类型,可能不足以处理大文件 - 对于大文件,可使用
fseeko()(POSIX)或_fseeki64()(Windows)
- 标准
- 有效性检查:
-
- 使用前应确保文件已成功打开
- 检查返回值以确认操作是否成功
- 与
ftell()配合使用:
-
ftell()可以获取当前文件位置- 两者常配合使用实现文件随机访问
- 缓冲区影响:
-
- 在调用
fseek()前可能需要fflush()确保缓冲区已写入
- 在调用
错误处理
if (fseek(file, offset, origin) != 0) {
perror("fseek failed");
// 处理错误
}
fseek 是文件随机访问的核心函数,合理使用可以实现高效的文件操作,特别适合处理大型数据文件或需要频繁定位的场景。
603

被折叠的 条评论
为什么被折叠?



