(3)Linux基础——fseek、ftell、rewind详细含义用法及介绍(基础)

本文介绍了C语言中的fseek函数用于修改文件流的偏移量,ftell获取当前偏移量,以及rewind函数将文件流重置到开头。示例代码展示了如何使用这些函数统计文件大小、在文件中定位及修改内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、fseek

①函数原型:int fseek(FILE *stream, long offset, int whence);

②功能:修改流的偏移量

③参数:

stream:文件流指针

offset:偏移量

offset > 0 偏移量向后移

offset < 0 偏移量向前移

whence:

SEEK_SET:文件开头位置

SEEK_CUR:文件当前位置

SEEK_END:文件末尾

④返回值:成功返回0,失败返回1

eg:

fseek(fp, 5 ,SEEK_SET):把文件内部指针移动到距离文件开头5字节处

fseek(fp, 5 ,SEEK_CUR):把文件内部指针移动到离文件当前位置5字节处(指的是当前位置往后五字节处)

fseek(fp, 5 ,SEEK_END):把文件内部指针退回到离文件结尾5字节处

注意:有时可用0,1和2表示SEEK_SET,SEEK_CUR和SEEK_END

eg:

编写一个程序统计文件的大小(利用SEEK_END,获得文件在结束之前字符的大小)

#include <stdio.h>

int main(int argc, char const *argv[])
{
    FILE *fp = NULL;
    long len = 0;

    fp = fopen("a.txt","r");
    if( NULL == fp)
    {
        perror("fail to open");
        return -1;
    }

    fseek(fp,0,SEEK_END); //定位到文件末尾的位置
    len = ftell(fp); //获得流的偏移量,统计文件的大小
   
    printf("len = %ld\n",len);
    return 0;
}

运行结果:len =56和文件目录中a.txt大小一模一样

二、ftell

①函数原型:long ftell(FILE *stream);

②功能:获得流的偏移量

③参数:stream:文件流指针

定义一个long类型,例如fseek中计算文件大小的例题

三、rewind

①函数原型:void rewind(FILE *stream);

②功能:将流的偏移量重新定位到开头

③参数:stream:文件流指针

注意:rewind(stream) 等于fseek(stream, 0 ,SEEK_SET)

eg:

#include <stdio.h>

int main(int argc, char const *argv[])
{
    FILE *fp = NULL;
    long len = 0;

    fp = fopen("a.txt", "w");
    if (NULL == fp)
    {
        perror("fail to fopen");
        return -1;
    }

    fseek(fp, 10, SEEK_SET);
    fputc('a', fp);
    len = ftell(fp);
    printf("len = %ld\n", len);

    fseek(fp, -5, SEEK_CUR);
    fputc('b', fp);
    len = ftell(fp);
    printf("len = %ld\n", len);

    rewind(fp); //重新定位到开头
  
    fputc('c', fp);
    len = ftell(fp);
    printf("len = %ld\n", len);

    fclose(fp);

    return 0;
}

输出结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值