C++之lseek64应用总结(二百三十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:理解C++之lseek64用法。

2.lseek64介绍

lseek64是一个系统调用函数,用于在文件中定位文件指针的位置。它的目的是允许程序随机地访问文件,并在不同位置进行读取或写入操作。

lseek64函数的原型如下:

off64_t lseek64(int fd, off64_t offset, int whence);

参数说明:

  • fd:文件描述符,用于标识要进行操作的文件。
  • offset:指定了相对于whence参数中位置的位移量。
  • whence:指定了定位的参考位置,可以是以下值之一:
    • SEEK_SET:从文件开头开始计算偏移量。
    • SEEK_CUR:以当前文件指针位置为参考点计算偏移量。
    • SEEK_END:从文件末尾开始计算偏移量。

返回值为一个新的文件偏移量,若出错则返回-1。

lseek64的实现原理是通过改变文件描述符所绑定文件对象的偏移量来实现文件指针的定位。每个打开的文件都会有相应的文件对象,文件对象中包含文件的相关信息,例如文件位置指针,文件状态等。通过改变文件对象的偏移量,文件指针的位置也会相应地改变。

当调用lseek64函数时,操作系统会根据给定的偏移量和参考位置确定新的文件指针位置。然后将该位置更新到文件对象中,并返回新的文件偏移量给调用方。

需要注意的是,lseek64函数适用于大文件,对于普通文件可以使用lseek函数进行定位。lseek64主要用于支持超过 2GB 的文件大小的定位。

3.应用实例

<1>.将文件指针定位到文件开头

#include <iostream>
#include <fcntl.h>
#include <unistd.h>void seekToFileStart(int fd) {off64_t newPosition = lseek64(fd, 0, SEEK_SET);  // 文件指针定位到文件开头if (newPosition == -1) {std::cerr << "文件指针定位失败" << std::endl;} else {std::cout << "文件指针定位成功,新的位置为:" << newPosition << std::endl;}
}int main() {int fd = open("file.txt", O_RDONLY);  // 打开文件if (fd == -1) {std::cerr << "文件打开失败" << std::endl;return 1;}seekToFileStart(fd);  close(fd);  // 关闭文件return 0;
}

<2>.将文件指针定位到文件末尾

#include <iostream>
#include <fcntl.h>
#include <unistd.h>void seekToFileEnd(int fd) {off64_t newPosition = lseek64(fd, 0, SEEK_END);  // 文件指针定位到文件末尾if (newPosition == -1) {std::cerr << "文件指针定位失败" << std::endl;} else {std::cout << "文件指针定位成功,新的位置为:" << newPosition << std::endl;}
}int main() {int fd = open("file.txt", O_RDWR);  // 打开文件if (fd == -1) {std::cerr << "文件打开失败" << std::endl;return 1;}seekToFileEnd(fd);  close(fd);  // 关闭文件return 0;
}

<3>.将文件指针向后移动100个字节

#include <iostream>
#include <fcntl.h>
#include <unistd.h>void seekForward(int fd, off64_t offset) {off64_t newPosition = lseek64(fd, offset, SEEK_CUR);  // 文件指针向后移动offset字节if (newPosition == -1) {std::cerr << "文件指针定位失败" << std::endl;} else {std::cout << "文件指针定位成功,新的位置为:" << newPosition << std::endl;}
}int main() {int fd = open("file.txt", O_WRONLY);  // 打开文件if (fd == -1) {std::cerr << "文件打开失败" << std::endl;return 1;}seekForward(fd, 100);  // 向后移动100个字节close(fd);  // 关闭文件return 0;
}

<4>.将文件指针向前移动200个字节

#include <iostream>
#include <fcntl.h>
#include <unistd.h>void seekBackward(int fd, off64_t offset) {off64_t newPosition = lseek64(fd, -offset, SEEK_CUR);  // 文件指针向前移动offset字节if (newPosition == -1) {std::cerr << "文件指针定位失败" << std::endl;} else {std::cout << "文件指针定位成功,新的位置为:" << newPosition << std::endl;}
}int main() {int fd = open("file.txt", O_RDWR);  // 打开文件if (fd == -1) {std::cerr << "文件打开失败" << std::endl;return 1;}seekBackward(fd, 200);  //向前移动200个字节close(fd);  // 关闭文件return 0;
}

<5>.将文件指针定位到离文件末尾处100个字节的位置

#include <iostream>
#include <fcntl.h>
#include <unistd.h>void seekFromEnd(int fd, off64_t offset) {off64_t newPosition = lseek64(fd, -offset, SEEK_END);  // 文件指针定位到离文件末尾处offset字节的位置if (newPosition == -1) {std::cerr << "文件指针定位失败" << std::endl;} else {std::cout << "文件指针定位成功,新的位置为:" << newPosition << std::endl;}
}int main() {int fd = open("file.txt", O_WRONLY);  // 打开文件if (fd == -1) {std::cerr << "文件打开失败" << std::endl;return 1;}seekFromEnd(fd, 100);  //定位到离文件末尾处100个字节的位置close(fd);  // 关闭文件return 0;
}

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

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

相关文章

CMU15-445 format\clang-format\clang-tidy 失败

CMU15-445 format\clang-format\clang-tidy 失败 问题修改 问题 -- Setting build type to Debug as none was specified. -- Youre using Clang 14.0.0 CMake Warning at CMakeLists.txt:67 (message):BusTub/main couldnt find clang-format.CMake Warning at CMakeLists.tx…

Python中使用EMD(经验模态分解)

在Python中使用EMD&#xff08;经验模态分解&#xff09;进行信号分解时&#xff0c;通常可以设置信号分解的数目。EMD算法的目标是将信号分解成多个称为“本征模态函数”&#xff08;Intrinsic Mode Functions&#xff0c;简称IMF&#xff09;的成分&#xff0c;每个IMF都代表…

【设计模式】组合模式

文章目录 1.组合模式定义2.组合模式的结构2.1. 安全式组合模式的结构2.2.透明式组合模式的结构 3.组合模式实战案例3.1.场景说明3.2.关系类图3.3.代码实现 4.组合模式优缺点5.组合模式适用场景6.组合模式总结 主页传送门&#xff1a;&#x1f481; 传送 1.组合模式定义 组合模式…

服务注册发现_actuator微服务信息完善

SpringCloud体系里的&#xff0c;服务实体向eureka注册时&#xff0c;注册名默认是IP名:应用名:应用端口名。 问题&#xff1a; 自定义服务在Eureka上的实例名怎么弄呢 在服务提供者pom中配置Actuator依赖 <!-- actuator监控信息完善 --> <dependency><groupId…

2 C++中的引用

C中的引用 上节说到&#xff0c;变量名实际上是一段连续存储空间的别名。很显然我们可以将其命名为其它名字&#xff0c;就像我们有乳名、小名一样。 C引入了引用的概念。 引用可以看作一个已定义变量的别名引用的语法 type& name variate;普通引用在声明时必须用其它的…

springboot和vue:二、springboot特点介绍+热部署热更新

springboot特点介绍 能够使用内嵌的Tomcat、Jetty服务器&#xff0c;不需要部署war文件。提供定制化的启动器Starters&#xff0c;简化Maven配置&#xff0c;开箱即用。纯Java配置&#xff0c;没有代码生成&#xff0c;也不需要XML配置。提供了生产级的服务监控方案&#xff0…

如何在 SOLIDWORKS中创建零件模板 硕迪科技

作为一款多功能且可大量定制的 3D CAD 软件&#xff0c;SOLIDWORKS模板可以通过自定义属性包含大量数据。可以通过为SOLIDWORKS零件、装配体和工程图创建模板来利用这些模板。 与其他一些CAD软件不同&#xff0c;SOLIDWORKS不限制您可以创建的模板数量 - 您可以根据需要创建任…

在项目中,关于前端实现数据可视化的技术选择

前言 在项目中&#xff0c;数据可视化以图表、报表类型为主。 需求背景 技术框架是Vue2.x版本&#xff0c;组件库是Ant Design of Vue能够支撑足够多的图表类型开发图表大小/位置能够随意变动图表样式需要支持丰富多样的用户配置强大、开放的图表语法支持复杂的数据可视化场景…

【深度学习实验】前馈神经网络(四):自定义逻辑回归模型:前向传播、反向传播算法

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 逻辑回归Logistic类 a. 构造函数__init__ b. __call__(self, x)方法 c. 前向传播forward d. 反向传播backward 2. 模型训练 3. 代码整合 一、实验介绍 实现逻…

Linux 目录结构介绍

对上面的说明: root 目录 &#xff1a; linux 超级权限 root 的主目录 home 目录 &#xff1a; 系统默认的用户主目录&#xff0c;如果添加用户是不指定用户的主目录&#xff0c;默认在/home 下创建与用户同名的文件夹 bin 目录 &#xff1a; 存放系统所需要的重要命令&am…

uniapp Echart X轴Y轴文字被遮挡怎么办,或未能铺满整个容器

有时候布局太小&#xff0c;使用echarts&#xff0c;x轴y轴文字容易被遮挡&#xff0c;怎么解决这个问题呢&#xff0c;或者是未能铺满整个容器。 方法1&#xff1a; 直接设置 containLabel 字段 options: { grid: { containLabel: true, },} 方法2: 间接设置&#xff0c;但是…

【新版】系统架构设计师 - 案例分析 - 信息安全

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 案例分析 - 信息安全安全架构安全模型分类BLP模型Biba模型Chinese Wall模型 信息安全整体架构设计WPDRRC模型各模型安全防范功能 网络安全体系架构设计开放系统互联安全体系结构安全服务与安全机制…

mysql workbench常用操作

1、No database selected Select the default DB to be used by double-clicking its name in the SCHEMAS list in the sidebar 方法一&#xff1a;双击你要使用的库 方法二&#xff1a;USE 数据库名 2、复制表名&#xff0c;字段名 3、保存链接

vue3+ts 实现移动端分页

current 开始页码 pageSize 结束页码 const sizeref<number>(10) //一页显示十条 const eachCurrentPageref<number>(1) //默认是第一页interface ITdata {current: number,pageSize: number,// xxxx 其他参数... } const selectApplyList ref<…

联想电脑打开exe提示要在Microsoft Store中搜索应用

问题&#xff1a; 你需要为此任务安装应用。 是否要在Microsoft Store中搜索一个&#xff1f; 如图&#xff1a; 出现此情况&#xff0c;仅需要做如下操作&#xff0c;在要打开的exe文件上右键&#xff0c;属性&#xff1a; 如图箭头所示&#xff0c;点击“解除锁定”出现对钩&…

<十二>objectARX开发:Arx注册命令类型的含义以及颜色索引对应RGB值

1、注册命令类型 我们经常在acrxEntryPoint.cpp中看到注册命令如下: 那么各个宏定义代表什么意思呢? 主标识:(常用的) ACRX_CMD_MODAL: 在别的命令执行的时候该命令不会在其中执行。ACRX_CMD_TRANSPARENT: 命令可以再其它命令中执行,但在该标志下ads_sssetfirst()不能使…

LeetCode 494.目标和 (动态规划 + 性能优化)二维数组 压缩成 一维数组

494. 目标和 - 力扣&#xff08;LeetCode&#xff09; 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2…

用Redis做数据排名

1.背景 用Redis做数据缓存用的比较多&#xff0c;大家都能熟练使用String和Hash结构去存储数据&#xff0c;今天讲下如何使用ZSet来做数据排名。 假设场景是需要按天存储全国城市的得分数据&#xff0c;可以查询前十名的城市排名。 这个case可以使用传统关系型数据库做…

如何修复wmvcore.dll缺失问题,wmvcore.dll下载修复方法分享

近年来&#xff0c;电脑使用的普及率越来越高&#xff0c;人们在日常生活中离不开电脑。然而&#xff0c;有时候我们可能会遇到一些问题&#xff0c;其中之一就是wmvcore.dll缺失的问题。wmvcore.dll是Windows平台上用于支持Windows Media Player的动态链接库文件&#xff0c;如…

SD-MTSP:萤火虫算法(FA)求解单仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

一、萤火虫算法&#xff08;FA&#xff09;简介 萤火虫算法(Firefly Algorithm&#xff0c;FA)是Yang等人于2009年提出的一种仿生优化算法。 参考文献&#xff1a;田梦楚, 薄煜明, 陈志敏, et al. 萤火虫算法智能优化粒子滤波[J]. 自动化学报, 2016, 42(001):89-97. 二、单仓…