当前位置: 首页 > news >正文

Linux 文件操作-标准IO函数4-fseek设置文件偏移量、ftell获取当前偏移量、rewind使文件偏移量(为0)定位到开头

目录

1.fseek设置文件偏移量

2.ftell获取当前偏移量

3.rewind使文件偏移量(为0)定位到开头

4.程序验证


1.fseek设置文件偏移量

函数原型:

/* 功能:设置文件位置指针的偏移量
参数:
stream:文件指针
offset:偏移量
    可正可负也可为0, > 0 向后偏移; < 0 向前偏移

whence:相对位置
    SEEK_SET 文件起始位置
     SEEK_CUR 文件当前位置
     SEEK_END 文件末尾位置(最后一个字符后面一个位置)

 返回值:
 成功:0
 失败:‐1  */

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

2.ftell获取当前偏移量

函数原型:

/* 功能:获取当前文件的偏移量
 参数:
 stream:文件指针

 返回值:
 获取当前文件的偏移量 */

long ftell(FILE *stream);

3.rewind使文件偏移量(为0)定位到开头

函数原型:

/* 功能:将文件位置定位到起始位置
 参数:
 stream:文件指针
 返回值:无 */

void rewind(FILE *stream);
fseek(fp, 0, SEEK_SET);//等价于 rewind(fp); //定位到开头

4.程序验证

#include <stdio.h>

int main(int argc, char *argv[])
{
    FILE *fp = NULL;
    char buf[64] = "";
    
    fp = fopen("./file.txt", "w+");
    if(fp == NULL)
    {
        printf("fail to fopen\n");
        return -1;
    }

    //通过fputs函数向文件写入数据
    fputs("0123456789\n", fp);//11字节
    fputs("ABCDEFGHIJ\n", fp);//11字节
    fputs("9876543210", fp);//10字节,共写入32字节

	//获取当前文件指针的读写位置
    printf("fputs offset = %ld\n", ftell(fp));

	//将当前文件的读写文件设置到文件的起始位置
    rewind(fp);
    //fseek(fp, 0, SEEK_SET);//等价于 rewind(fp); //定位到开头
    //获取当前文件指针的读写位置
    printf("rewind(fp) offset = %ld\n", ftell(fp));

	
    //SEEK_CUR:为当前位置(上述程序偏移到文件开头)
    //将当前文件的读写位置设置为SEEK_CUR+6
    fseek(fp, 6, SEEK_CUR); 
    printf("SEEK_CUR+6 offset = %ld\n", ftell(fp));
    //读取内容
    while(fgets(buf, 64, fp) != NULL)
    {
        printf("SEEK_CUR+6 buf = %s\n", buf);
    }
    
	//将当前文件的读写位置设置为倒数第3个位置
    fseek(fp, -3, SEEK_END); 
    printf("SEEK_CUR-3 offset = %ld\n", ftell(fp));
    //读取内容
    while(fgets(buf, 64, fp) != NULL)
    {
        printf("SEEK_END-3 buf = %s\n", buf);
    }

	//将当前文件的读写位置设置为开头第5个位置
    fseek(fp, 5, SEEK_SET); //读取内容
    printf("SEEK_SET+5 offset = %ld\n", ftell(fp));
     while(fgets(buf, 64, fp) != NULL)
    {
        printf("SEEK_SET+5 buf = %s\n", buf);
    }
	
    fclose(fp);  	 	
    return 0;
}

运行结果:

相关文章:

  • 英语词性--形容词
  • 智能宠物饮水机WTL580微波雷达感应模块方案;便捷管理宠物饮水
  • 三维仿射变换-简略版
  • 【合新通信】---射频光模块
  • Deepseek使用技巧大全
  • Redis主从复制(Master-Slave Replication)解析与搭建操作指南
  • L2TP实验 作业
  • 每日OJ_牛客_DP44兑换零钱_C++_Java
  • Pytorch中layernorm实现详解
  • C语言基础(函数)
  • 正则魔法:解码 return /^\d+$/.test(text) ? text : ‘0‘ 的秘密
  • 【笔记】深度学习模型训练的 GPU 内存优化之旅:重计算篇
  • 2025最新电脑IP地址修改方法:Win系统详细步骤
  • springboot使用163发送自定义html格式的邮件
  • 为什么TCP需要三次握手?一次不行吗?
  • 【Servlet 容器和 Spring 容器的关系】
  • 人工智能之数学基础:线性方程组
  • mysql-innodb存储引擎主键索引叶子结点数据结构(非单纯的双向链表)
  • PyCharm安装redis,python安装redis,PyCharm使用失败问题
  • WPF 布局舍入(WPF 边框模糊 或 像素错位 的问题)
  • “五一”假期首日国铁郑州局迎大客流,预计发送旅客逾95万人次
  • 印度宣布即日起对所有巴基斯坦航班关闭领空
  • 国台办:“台独”是绝路,外人靠不住
  • 陕西省副省长窦敬丽已任宁夏回族自治区党委常委、统战部部长
  • 中国防疫队深入缅甸安置点开展灾后卫生防疫工作
  • 美国通过《删除法案》:打击未经同意发布他人私密图像,包括“深度伪造”