Linux lseek函数的使用

article/2025/11/11 2:30:21

Linux lseek函数的使用


注:如果文章内容有误,请留言指出,谢谢合作。


名字

Name : lseek - reposition read/write file offset

lseek函数的作用是用来重新定位文件读写的位移。

头文件以及函数声明

#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);

offset为正则向文件末尾移动(向前移),为负数则向文件头部(向后移)。

描述

lseek() repositions the file offset of the open file description associated with the file descriptor fd to the argument offset according to the directive whence as follows:
SEEK_SET The file offset is set to offset bytes.
SEEK_CUR The file offset is set to its current location plus offset bytes.
SEEK_END The file offset is set to the size of the file plus offset bytes.

lseek() allows the file offset to be set beyond the end of the file (but this does not change the size of the file). If data is later written at this point, subsequent reads of the data in the gap (a “hole”) return null bytes (‘\0’) until data is actually written into the gap.

lseek()函数会重新定位被打开文件的位移量,根据参数offset以及whence的组合来决定:

SEEK_SET:
  从文件头部开始偏移offset个字节。
SEEK_CUR
  从文件当前读写的指针位置开始,增加offset个字节的偏移量。
SEEK_END
  文件偏移量设置为文件的大小加上偏移量字节。

测试代码:

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>#define BUFFER_SIZE 1024
#define SRC_FILE_NAME "src_file"
#define DEST_FILE_NAME "dest_file"
//根据传入的参数来设置offset
#define OFFSET (atoi(args[1])) int main(int argc, char*args[]) {int src_file, dest_file;unsigned char buff[BUFFER_SIZE];int real_read_len, off_set;if (argc != 2) {fprintf(stderr, "Usage: %s offset\n", args[0]);exit(-1);}src_file = open(SRC_FILE_NAME, O_RDONLY);dest_file = open(DEST_FILE_NAME, O_WRONLY | O_CREAT, S_IREAD | S_IWRITE );//owner权限:rwif (src_file < 0 || dest_file < 0) {fprintf(stderr, "Open file error!\n");exit(1);}off_set = lseek(src_file, -OFFSET, SEEK_END);//注意,这里对offset取了相反数printf("lseek() reposisiton the file offset of src_file: %d\n", off_set);while((real_read_len = read(src_file, buff, sizeof(buff))) > 0) {write(dest_file, buff, real_read_len);}close(dest_file);close(src_file);return 0;
}

lseek函数的使用

结果解析

  观察offset以及dest_filesrc_file文件的大小不难看出:程序通过lseek函数将src_file文件指针重新定位到文件末尾 + offset(注意,本程序对offset取了相反数,即文件末尾 + (-offset))处,然后从文件末尾 + offset处开始向前复制文件到dest_file中。


http://chatgpt.dhexx.cn/article/eIKp0U8w.shtml

相关文章

lssek函数的用法及作用

1.lseek函数的介绍 &#xff08;1&#xff09;文件指针&#xff1a;当我们对一个文件读写时&#xff0c;一定需要打开这个文件&#xff0c;所以我们操作的都是动态文件&#xff0c;动态文件在内存中的形态就是流的形式。 &#xff08;2&#xff09;文件流很长&#xff0c;里面有…

5.文件光标移动操作计算文件大小_lseek函数

目录 一.lseek函数简介&#xff1a; 1.包含的头文件 2.函数原型 3.函数参数说明&#xff1a; 4.lseek函数描述 5.函数返回值 二.运用lseek移动光标&#xff0c;代码demo&#xff1a; 几种lseek移动光标的操作方法&#xff1a; 三.利用lseek函数的返回值&#xff0c;巧妙…

lseek函数

lseek函数是用来调整文件的读写偏移量的。对于每一个文件&#xff0c;它都是有一个读写偏移量的&#xff0c;系统就是通过它来记录文件当前的读写位置。我们在对文件进行读写操作时&#xff0c;就可以通过lseek来设置这个偏移量。 首先来看下lseek函数的详细信息。在终端命令行…

Linux系统调用四、lseek()函数详解

&#x1f680;文章目录 ❀1. 案例&#xff1a;写文件并把写入内容打屏❀2. lseek移动文件读写位置❀3. lseek计算文件大小❀4. lseek拓展文件大小 ❀1. 案例&#xff1a;写文件并把写入内容打屏 我们可以通过上一节所讲的read()和write()函数来实现向一个文件中写入内容并把写…

windows 安装开启 telnet 服务

本人用的是windows 8.1 不过windows7的开启方法也适用 首先打开控制面板->程序->启用或关闭windows功能 选上Telnet服务器、Telnet客户端 然后按 winr 或者开始->运行 输入services.msc 找到telnet服务, 建议设置成手动启动,之后启动它即可使用telnet命令

window2008开启telnet服务

第一步:查看电脑是否安装telnet 第二步:进入控制面板 第三步:打开或关闭window功能 第四步:功能--添加telnet 第五步:验证 服务器远程管理–远程桌面 window2008开启telnet服务 服务器远程–telnet

Win10开启telnet功能

控制面板里面搜索“启用或关闭 windows 功能” 勾选“Telnet 客户端”

CentOS开启telnet服务

ECS大优惠点我点我&#xff01;&#xff01;&#xff01;红包折扣&#xff0c;阿里云上云大礼包&#xff01;&#xff01;&#xff01; 一、安装telnet-server yum install telnet-server二、启动telnet服务 编辑/etc/xinetd.d/telnet, 将其中的 disable yes 的yes改为no. …

Centos8 开启Telnet服务

环境&#xff1a;Centos8.2 目的&#xff1a;安装Telnet服务为Python程序Telnet源码测试用 首先安装telnet服务 [rootlocalhost ~]# yum install telnet-server 上次元数据过期检查&#xff1a;0:21:09 前&#xff0c;执行于 2020年12月25日 星期五 03时59分46秒。 依赖关系解…

Telnet服务配置

实验环境&#xff1a;ensp&#xff0c;华为命令 实验拓扑&#xff1a; 实验需求&#xff1a; 作为一名网络管理员&#xff0c;为了简化网络设备的管理&#xff0c;通过配置Telnet服务实现远程管理路由器的功能&#xff0c;具体需求如下&#xff1a; 为了方便管理员管理设备&…

NexT 主题自定义侧边栏图标

NexT 主题的图标基本上都是由 Font Awesome 提供&#xff0c;但是知乎、CSDN、bilibili等大多数国内应用软件的图标在Font Awesome都不支持。为了支持侧边栏各种应用小图标的显示&#xff0c;可以利用嵌入svg格式的图标进行实现。 本人博客实现效果如下&#xff1a; 本人使用博…

hexo next 主题安装 livere 评论插件

之前用gitalk评论插件&#xff0c;但是访问github登录授权感人&#xff0c;有时还要开代理&#xff0c;体验不佳&#xff0c;而且每次都要初始化评论&#xff0c;偶然访问别人的博客发现了一款比较好用的评论插件&#xff1a;livere , 我按照官网研究了一会&#xff0c;发现h…

Hexo博客进阶:为 Next 主题添加 Waline 评论系统

前言 在之前的 Hexo博客进阶&#xff1a;为Next主题添加Valine评论系统 | 谢同学的博客 (qianfanguojin.top) 文章中&#xff0c;我叙述了如何 在 Next主题下配置 Valine 评论系统。 但是&#xff0c;根据读者反馈&#xff0c;Valine 评论系统在 Next 主题高版本 (7.) 以上已…

Hexo+Next主题的一些实用插件和美化升级

HexoNext主题的一些实用插件和美化升级 添加右上角图标folk github添加站内搜索主页显示项目moon-cake 进度显示和上下滑动代码颜色首页只显示文章摘要NexT8动画背景Canvas Nest修改链接样式LaTeX公式编辑问题使用mermaid绘制流程图mermaid的flowchart基础语法 访客统计文章目录…

Hexo博客主题安装及Next主题个性化修改

原文链接https://www.lixint.me/hexo-theme-diy.html 欢迎加入博客搭建交流群&#xff08;QQ群号60429576&#xff09;>点击加入< 写在最前面&#xff1a; 1.在修改时请注意博客配置文件与主题配置文件的区别&#xff1a;博客配置文件是指博客根目录下的_config.yml文件…

Hexo-Next主题优化

添加动态背景添加背景图片侧边栏设置头像设置&#xff08;圆形旋转&#xff09;浏览页面显示当前浏览进度添加顶部加载条Hexo-Next代码复制功能 1. 添加动态背景 动态背景就是我的博客背景中动的那些粒子。 只需修改主题配置文件 /themes/next/_config.yml # Canvas-nest c…

基于Hexo搭建Next主题博客

Next 链接地址&#xff1a;https://github.com/caozongpeng/hexo-theme-next NexT 是一个高质量并且优雅的Hexo 主题。这是精心制作做出来的 hexo 主题。 如果你对此主题非常喜欢&#xff0c;欢迎Star & Fork&#xff0c;非常感谢。 预览界面 首页 底部 相册 文章 搜索…

Next主题添加背景图片

文章目录 操作步骤添加背景图片设置透明边框圆角 hexo 和 Next 的版本如下&#xff1a; hexo: 5.2.0 NexT: 7.8.0 操作步骤 进入 themes\next\source\css 目录中打开 main.styl 文件在末尾添加 css 代码即可 添加背景图片 值得注意的是&#xff0c;在 main.styl 文件末尾写的…

Hexo-Next主题博客个性化配置

Hexo版本&#xff1a;6.2.0、NextT版本&#xff1a;7.8.0 一、主题安装 打开Git Bash&#xff0c;cd到站点根目录&#xff0c;输入 git clone https://github.com/theme-next/hexo-theme-next themes/next打开站点根目录下的_config.yml文件&#xff0c;landscape修改为next …

hexo下next主题的优化

1.站点信息的配置。 修改一些基本的配置&#xff0c;比如站点名、站点描述等等。 # Site title: halisi7 subtitle: 一个专注技术的组织 description: 涉猎的主要编程语言为 c语言、Java、mysql、linux、docker&#xff0c;领域涵盖算法、服务研发和对象存储等。 keywords: c…