十二、Linux文件 - fseek函数讲解

news2025/1/10 23:31:53

目录

一、fseek函数讲解

二、fseek函数实战


一、fseek函数讲解

重定向文件内部的指针

 注:光标 ---- 文件内部的指针

函数原型:

int fseek(FILE *stream,long offset,int framewhere)
  • 参数:
    • stream:文件指针
    • offset:指针的偏移量
    • framewhere:指针偏移起始位置
  • 返回值:重定位成功返回0,否则返回非零

需要注意的是该函数不是重定位文件指针,而是重定位文件内部的指针,让指向文件内部数据的指针移到文件中我们感兴趣的数据上,重定位主要是这个目的。

说明:执行成功,则stream指向fromwhere为基准,偏移offset个字节的位置。执行失败(比方说offset偏移的位置超出了文件大小),则保留原来的stream的位置不变

分别用3个宏:

  • SEEK_SET 即0 文件开头
  • SEEK_CUR 即1 文件当前位置
  • SEEK_END 即2 文件末尾

但不推荐用数字,最好用宏,简言之:

  1. fseek(fp,100L,SEEK_SET);把fp指针移动到离文件开头100字节处;
  2. fseek(fp,100L,SEEK_CUR);把fp指针移动到离文件当前位置100字节处;
  3. fseek(fp,100L,SEEK_END);把fp指针退回到离文件结尾100字节处;

二、fseek函数实战

  1.  执行流程
  2. 代码内容

源代码:

#include <stdio.h>
#include <string.h>
int main()
{
        FILE *fp = NULL;
        int nRet = 0;
        char readBuff[12];
        memset(readBuff,0,12);
        char* writeBuff = "hello world!";


        fp = fopen("mm","r+");//r+
        if(fp == NULL)
        {
                printf("open failed!\n");
                return -1;
        }
        printf("open success1\n");

        nRet = fread(readBuff,4,2,fp);
        if(nRet <= 0)
        {
                printf("fread failed!\n");
                return -3;
        }
        printf("read %s\n",readBuff);

        nRet = fseek(fp,1,SEEK_SET);
        if(nRet != 0)
        {
                printf("fseek failed!");
                return -4;
        }
        printf("fseek succeess!\n");

        nRet = fwrite(writeBuff,4,1,fp);
        if(nRet <= 0)
        {
                printf("fwrite failed!");
                return -4;
        }
        printf("fwrite success!\n");

        nRet = fclose(fp);
        if(nRet != 0)
        {
                printf("close failed!\n");
                return -2;
        }
        printf("close success1\n");

        return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/337631.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

golang由浅入深

简介 Go语言&#xff08;Golang&#xff09;是由Google公司的Robert Griesemer、Rob Pike、Ken Thompson三位工程师开发的一种静态强类型、编译型、并发型、快速运行的编程语言。 Go语言诞生于2007年&#xff0c;旨在创造一种具有现代特性的编程语言&#xff0c;可以替代C和Jav…

DS期末复习卷(二)

选择题 1&#xff0e;下面关于线性表的叙述错误的是&#xff08; D &#xff09;。 (A) 线性表采用顺序存储必须占用一片连续的存储空间 (B) 线性表采用链式存储不必占用一片连续的存储空间 © 线性表采用链式存储便于插入和删除操作的实现 (D) 线性表采用顺序存储便于插…

2023春招100道软件测试高频面试题

给大家整理了2023春招的100道软件测试高频面试题&#xff0c;篇幅较长&#xff0c;所以只放出了题目&#xff0c;答案在文末&#xff0c;自行获取哦&#xff01; 1.项目测试流程你是怎么开展的&#xff1f; 2.接口测试用例的编写要点有哪些&#xff1f; 3.APP测试和Web测试有…

ubuntu20.04安装docker与docker-compose

安装docker 查看系统发行版本 cat /proc/version1、更新apt包 sudo apt-get update2、安装必备的软件包以允许apt通过 HTTPS 使用存储库&#xff08;repository&#xff09;&#xff1a; sudo apt-get install ca-certificates curl gnupg lsb-release3、添加Docker官方版本…

C语言学习笔记(一):了解C语言

什么是C语言 C语言是一种高级编程语言&#xff0c;最早由丹尼斯里奇在1972年开发。它是一种通用编程语言&#xff0c;提供了高级编程语言的方便和易用性&#xff0c;同时又有较低级别的编程语言的灵活性和效率。C语言在许多操作系统、编译器和应用程序开发中广泛使用&#xff…

使用Naticat同步数据库结构

现象&#xff1a; 开发环境对数据库结构进行了修改&#xff0c;如何同步到测试环境 例: 开发环境&#xff08;dev&#xff09;&#xff1a;my_test_data 测试环境&#xff08;test&#xff09;&#xff1a;my_test_data_1 方法&#xff1a; 使用Naticat同步两个数据库结构 选中…

PLC是什么?PLC相关知识小科普

欢迎各位来到东用知识小课堂1.PLC是什么&#xff1a;●PLC就是可编程控制器&#xff0c;它应用于工业环境&#xff0c;必须具有很强的抗干扰能力、广泛的适应能力和应用范围。●PLC是“数字运算操作的电子系统”&#xff0c;也是一种计算机&#xff0c;它是“专为在工业环境下应…

EdgeX Foundry (一)安装和部署

系统版本uname -rdocker 版本docker --versiondocker-compose版本安装参考链接&#xff1a;https://blog.csdn.net/chezong/article/details/128917107拉取edgex foundry 配置文件 docker-compose.yml; curl https://raw.githubusercontent.com/edgexfoundry/edgex-compose/ire…

【C语言学习笔记】:通讯录管理系统

系统中需要实现的功能如下&#xff1a; ✿ 添加联系人&#xff1a;向通讯录中添加新人&#xff0c;信息包括&#xff08;姓名、性别、年龄、联系电话、家庭住址&#xff09;最多记录1000人 ✿ 显示联系人&#xff1a;显示通讯录中所有的联系人信息 ✿ 删除联系人&#xff1a;按…

冒泡排序详解

冒泡排序是初学C语言的噩梦&#xff0c;也是数据结构中排序的重要组成部分&#xff0c;本章内容我们一起探讨冒泡排序&#xff0c;从理论到代码实现&#xff0c;一步步深入了解冒泡排序。排序算法作为较简单的算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&am…

信道建模(大尺度、小尺度、莱斯衰落、瑞利衰落、莱斯信道、瑞利信道)

一、大尺度衰落与小尺度衰落 大尺度衰落由收发两端的距离决定&#xff0c;功率上建模为&#xff1a; 小尺度衰落由收发两端的环境决定&#xff0c;比如是否有遮挡&#xff0c;场景有室内、室外、平原、山村、城镇等&#xff0c;这些环境影响到收发两端是否有直达链路&#xff0…

电子电路中的各种接地(接地保护与GND)

前言多年以前&#xff0c;雷雨天气下&#xff0c;建筑会遭遇雷击&#xff0c;从而破坏建筑以及伤害建筑内的人&#xff0c;为了避免雷击的伤害&#xff0c;人们发明了避雷针&#xff0c;并将避雷针接地线&#xff0c;从而引导雷击产生的电流经过地线流入到地下。地线&#xff1…

传统目标检测实战:HOG+SVM

传统目标检测实战&#xff1a;HOGSVM 文章目录传统目标检测实战&#xff1a;HOGSVM1. 前言1.1 传统和深度1.2 何为传统目标检测1.3 传统目标检测方法不足2. 先验知识3. 项目框架3.1 文件架构3.2 方法简要介绍4. 工具函数&#xff08;utils.py&#xff09;5. 特征提取&#xff0…

我是如何转岗成为数据分析师?

Datawhale干货 作者&#xff1a;孟禹&#xff0c;数据分析师&#xff0c;Datawhale邀约作者笔者背景介绍&#xff1a;工作5年半&#xff0c;前4年在K12在线教育负责教研和用户转化&#xff0c;21年双减之后跳槽到一家新消费品牌公司做数据分析师&#xff0c;跨了行转了岗。现在…

领英LinkedIn的个人商务会员和企业销售会员我们应该怎么选?

在详细介绍领英LinkedIn会员之前先解释下为什么要开通。也就是领英免费用户会有哪些限制以至于我们需要付费去开通会员&#xff1a;1.有限的搜索次数使用免费的 LinkedIn 帐户&#xff0c;您将在一个月内搜索约 300 次后达到商业使用限制。一旦达到商业使用限制&#xff0c;您将…

SpringBoot学习笔记【part18】拦截器与文件上传

一、拦截器Interceptor 拦截器 Interceptor 多用于登录检查与静态资源放行场景。 拦截器的实现步骤 编写一个拦截器实现 HandlerInterceptor 接口 Slf4j public class LoginInterceptor implements HandlerInterceptor {/*** 目标方法执行之前*/Overridepublic boolean preHa…

Redis 分布式基础——主从复制其实挺简单

Redis 主从同步 redis-master-slave-index 一、主从复制是啥 主从复制&#xff0c;或者叫 主从同步&#xff0c;是指将一台 Redis 服务器的数据&#xff0c;复制到其他的 Redis 服务器。前者称为 主节点(master)&#xff0c;后者称为 从节点(slave)。且数据的复制是 单向 的&…

GitLab CI-CD 学习笔记

概述 1. CI/CD CI&#xff08;持续集成&#xff09;指开发人员一天内进行多次合并和提交代码操作&#xff0c;并通过自动化测试&#xff0c;完成构建 CD&#xff08;持续部署&#xff09;指每次代码更改都会自动部署到对应环境 CI/CD 结合在一起&#xff0c;可以加快开发团…

如何写出优雅的代码

最近在做代码审查时&#xff0c;发现一个问题&#xff0c;就是代码不够优雅。代码可以有bug&#xff0c;但不能不优雅&#xff0c;毕竟代码不只是运行程序&#xff0c;凡是需要维护的代码都是给人看的&#xff0c;你的代码风格侧面反映了你的编码习惯、思维逻辑和专业性。那么如…

【强化学习】马尔可夫决策过程MDP

1.马尔可夫决策过程MDP 1.1 MDP五元组 MDP<S,A,P,R,γ>MDP<\mathcal{S},\mathcal{A},\mathcal{P},\mathcal{R},\mathcal{\gamma}>MDP<S,A,P,R,γ>&#xff0c;其中&#xff1a; S\mathcal{S}S&#xff1a;状态空间A\mathcal{A}A&#xff1a;动作空间P\mathc…