lssek函数的用法及作用

article/2025/11/10 17:28:51

1.lseek函数的介绍
(1)文件指针:当我们对一个文件读写时,一定需要打开这个文件,所以我们操作的都是动态文件,动态文件在内存中的形态就是流的形式。
(2)文件流很长,里面有很多字节。那我们操作的是哪一个位置,GUI模式下就是用光标来标识,在动态文件中,我们通过文件指针来表示正在操作的位置。文件指针其实就是vnode里的一个元素。这个指针表示我们操作的位置,在linux中用lseek来访问这个指针。
(3)write和read函数本身自带移动文件指针的功能,所以打开一个有n字节的文件,read/write会自动从n字节后读写,如果要人为改变这个文件指针就用lssek函数。

off_t lseek(int fd, off_t offset, int whence);
fd:文件描述符
offset:偏移字节数
whence:文件指针所在位置(SEEK_SET:起始位置、SEEK_CUR:当前位置、SEEK_END:末尾地址)
返回值:返回偏移量

2.用lseek计算文件的大小

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>int main(int argc ,char *argv[])
{int fd = -1;int ret = -1;if(argc != 2){printf("usage: %s filename\n",argv[0]);_exit(-1);}fd = open(argv[1],O_RDONLY);if(-1 == fd){printf("打开文件出错\n");_exit(-1);}else{printf("打开成功,fd = %d\n",fd);}//此时文件指针指向文件开头,我们用lseek将文件指针移动到末尾//然后返回值就是文件指针距离文件开头的偏移量,也就是文件的长度ret = lseek(fd,0,SEEK_END);printf("文件长度是%d个字节\n",ret);return 0;
}

将求文件大小大小这个功能封装成一个函数

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>int cal_len(const char *pathname)
{int fd = -1;int ret = -1;fd = open(pathname,O_RDONLY);if(-1 == fd){printf("打开文件出错\n");return -1;}//此时文件指针指向文件开头,我们用lseek将文件指针移动到末尾//然后返回值就是文件指针距离文件开头的偏移量,也就是文件的长度ret = lseek(fd,0,SEEK_END);return ret;}int main(int argc ,char *argv[])
{if(argc != 2){printf("usage:%s filename\n",argv[0]);_exit(-1);}printf("文件长度是%d个字节\n",cal_len(argv[1]));return 0;
}

输出展示
3.用lseek构建空洞文件
(1)空洞文件就是这个文件有一段是空的
(2)普通文件时不能为空的,因为我们write时文件指针是从前到后去移动的,不能绕过前面到后面
(3)我们打开一个文件后,用lseek往后跳过一段,在write写入一段,就会构成一个空洞文件。
(4)空洞文件对多线程共同操作文件是及其有用的,有时候我们创建一个很大的文件。如果从头依次构建是非常慢的,有一种思路将文件分为多段,然后多线程来操作每个线程负责其中一段写入。

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>int main()
{int fd = -1;int ret = -1;char writeBuf[10] = "asdqwe";fd = open("123.txt",O_RDWR|O_CREAT,0666);if(fd == -1){//printf("创建文件失败\n");perror("创建失败");_exit(-1);}else{printf("创建成功fd = %d\n",fd);}ret = lseek(fd,10,SEEK_SET);int n = write(fd,writeBuf,strlen(writeBuf));printf("写入了%d个字节\n",n);printf("偏移了%d个字节\n",ret);close(fd);return 0;
}

现象展示


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

相关文章

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…

Hexo博客-NexT主题自定义主页配置方法

Refrence https://zhuanlan.zhihu.com/p/366761432 问题 在使用Hexo博客框架的Next主题时&#xff0c;默认主页是数篇博客的摘要。想要修改主页&#xff08;也即首页&#xff09;的内容&#xff08;例如给出网站的介绍等&#xff09;&#xff0c;需要进行自定义配置。 步骤 …