C语言 fseek 函数详解

fseek 是C标准库中用于设置文件位置指针的函数,定义在 <stdio.h> 头文件中。它允许随机访问文件中的任意位置。

函数原型

int fseek(FILE *stream, long offset, int origin);

参数说明

1. stream 参数

类型FILE*

含义:指向已打开文件的指针,通常由 fopen() 返回

2. offset 参数

类型long

含义:从 origin 指定的位置开始的偏移量(以字节为单位)

    • 可以是正数(表示向前移动)或负数(表示向后移动)
    • 零表示不移动

3. origin 参数

  • 类型int
  • 含义:偏移的基准位置,可以是以下三个宏之一:

宏定义

含义

SEEK_SET

0

文件开头

SEEK_CUR

1

当前文件位置指针的位置

SEEK_END

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字节

注意事项

  1. 二进制文件与文本文件
    • 对于二进制文件,offset 精确对应字节数
    • 对于文本文件,offset 必须为0或 ftell() 返回的值
  1. 大文件支持
    • 标准 fseek() 使用 long 类型,可能不足以处理大文件
    • 对于大文件,可使用 fseeko()(POSIX)或 _fseeki64()(Windows)
  1. 有效性检查
    • 使用前应确保文件已成功打开
    • 检查返回值以确认操作是否成功
  1. ftell() 配合使用
    • ftell() 可以获取当前文件位置
    • 两者常配合使用实现文件随机访问
  1. 缓冲区影响
    • 在调用 fseek() 前可能需要 fflush() 确保缓冲区已写入

错误处理

if (fseek(file, offset, origin) != 0) {
    perror("fseek failed");
    // 处理错误
}

fseek 是文件随机访问的核心函数,合理使用可以实现高效的文件操作,特别适合处理大型数据文件或需要频繁定位的场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值