【Linux系统IO函数】lseek函数

article/2025/11/11 2:25:14

Linux系统IO函数—lseek函数

1.1 lseek函数与标准C库的fseek函数

lseek函数对应标准C库中的fseek函数

查看标准C库中的fseek函数使用说明:

(shell输入)

man 3 fseek

fseek函数:

#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);

查看Linux系统的lseek函数使用说明:

man 2 lseek

lseek函数:

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

<unistd.h>为UNIX系统的标准库

fseek和lseek差别:

  • 第一个参数:FILE *streamint fd
  • 第二个参数:long 类型和 off_t 类型

off_t 为一个宏定义,可以逐步找到源码查看其底层

  1. off_t<sys/types.h> 文件:
typedef __off_t off_t;
  1. __off_t<bits/types.h> 文件:
# define __STD_TYPE		typedef
__STD_TYPE __OFF_T_TYPE __off_t;/* Type of file sizes and offsets.*/
  1. __OFF_T_TYPE<typesizes.h> 文件:
#define __SLONGWORD_TYPE	long int
# define __SYSCALL_SLONG_TYPE	__SLONGWORD_TYPE
#define __OFF_T_TYPE		__SYSCALL_SLONG_TYPE

off_t 底层就是 long int 类型

1.2 lseek函数详解

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

lseek函数用来更改文件指针位置

  • 参数
    • fd:文件描述符,通过open得到,通过fd操作某个文件
    • offset:偏移量
    • whence
      • SEEK_SET:(从文件头开始偏移)设置文件指针的偏移量
      • SEEK_CUR:(从当前位置开始偏移)设置偏移量:当前位置 + 第二个offset的值
      • SEEK_END:设置偏移量:文件的大小(文件结尾) + 第二个参数offset的值
  • 返回值:返回文件指针的位置

1.3 lseek函数主要作用

1. 移动文件指针到文件头
lseek(fd, 0, SEEK_SET);
2. 获取当前文件指针的位置
lseek(fd, 0, SEEK_CUR);
3. 获取文件长度
lseek(fd, 0, SEEK_END);
4. 拓展文件的长度,当前文件10b, 110b, 增加100个字节
lseek(fd, 100, SEEK_END);

注意:要写入一个数据才有效

1.4 lseek函数实现文件拓展

编写lseek.c文件:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>int main() {// 扩展文件长度,执行写操作int fd = open("hello.txt", O_RDWR);if(fd == -1) {perror("open");return -1;}// 拓展文件的长度 增加100个字节int ret = lseek(fd, 100, SEEK_END);if(ret == -1) {perror("lseek");return -1;}// 关闭文件close(fd);return 0;
}

shell编译并运行:

fuerer@fuerer-virtual-machine:~/Linux/lesson11$ gcc lseek.c -o lseek
fuerer@fuerer-virtual-machine:~/Linux/lesson11$ ./lseek
fuerer@fuerer-virtual-machine:~/Linux/lesson11$ ll
总用量 28
drwxrwxr-x  2 fuerer fuerer 4096 324 11:21 ./
drwxrwxr-x 12 fuerer fuerer 4096 324 11:02 ../
-rw-rw-r--  1 fuerer fuerer   12 324 11:16 hello.txt
-rwxrwxr-x  1 fuerer fuerer 8432 324 11:21 lseek*
-rw-rw-r--  1 fuerer fuerer 1580 324 11:21 lseek.c

hello.txt文件长度并没有拓展100个字节

原因】lseek仅仅移动指针,若想实现文件扩展,需要写入一个空数据

在执行lseek后加上写入空数据操作write(fd, " ", 1);

完整文件如下:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>int main() {// 扩展文件长度,执行写操作int fd = open("hello.txt", O_RDWR);if(fd == -1) {perror("open");return -1;}// 拓展文件的长度 增加100个字节int ret = lseek(fd, 100, SEEK_END);if(ret == -1) {perror("lseek");return -1;}// lseek仅仅为移动指针// 若想真正实现拓展,要写入一个空数据write(fd, " ", 1);// 关闭文件close(fd);return 0;
}

再次编译运行:

fuerer@fuerer-virtual-machine:~/Linux/lesson11$ gcc lseek.c -o lseek
fuerer@fuerer-virtual-machine:~/Linux/lesson11$ ./lseek
fuerer@fuerer-virtual-machine:~/Linux/lesson11$ ll
总用量 28
drwxrwxr-x  2 fuerer fuerer 4096 324 11:26 ./
drwxrwxr-x 12 fuerer fuerer 4096 324 11:02 ../
-rw-rw-r--  1 fuerer fuerer  113 324 11:27 hello.txt
-rwxrwxr-x  1 fuerer fuerer 8472 324 11:26 lseek*
-rw-rw-r--  1 fuerer fuerer 1697 324 11:26 lseek.c

hello.txt大小由 12字节 ——> 113字节

(扩展100个字节后,又写入了" "一个字节)

在这里插入图片描述

文件拓展功能有何用途?

下载软件使用lseek为软件提前申请好可用空间
在这里插入图片描述


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

相关文章

Linux编程基础之lseek函数返回值

目录 前言lseek函数返回值实操证明书的原图总结 前言 操作系统&#xff1a;Fedora 头文件 <sys/types.h> , <unistd.h> lseek函数返回值 off_t oldpos(int fd,off_t dist,int base)当lseek执行成功时&#xff0c;它会返回最终以文件起始位置为起点的偏移位置。如…

linux的 lseek 函数

目录 回顾lseek函数 回顾 前面讲了往文件里面写入一个字符串 并且能够读写 强调了 读写不能同时进行。下面重新敲一下代码 写完成了 并且查看到结果 下面是读的部分 开始新的内容lseek函数 lseek&#xff1a;光标函数 函数原型 和参数 说明 简单理解 SEEK_SET: OFFEST 为…

Linux系统lseek函数作用

首先看下函数&#xff1a; off_t lseek(int fd, off_t offset, int whence); 所需要头文件&#xff1a; #include <sys/types.h> #include <unistd.h> 参数&#xff1a; fd 表示要操作的文件描述符 offset是相对于whence&#xff08;基准&#xff09;的…

Linux lseek函数的使用

Linux lseek函数的使用 注&#xff1a;如果文章内容有误&#xff0c;请留言指出&#xff0c;谢谢合作。 名字 Name : lseek - reposition read/write file offset lseek函数的作用是用来重新定位文件读写的位移。 头文件以及函数声明 #include <sys/types.h> #include …

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…