Linux系统编程——文件编程(四)光标移动(lseek)

2023-11-01

lseek函数

lseek是一个用于改变读写一个文件时读写指针位置的一个系统函数

每个打开的文件都有一个与其相关联的“当前文件偏移量”,它通常是一个非负整数,用以度量从文件开始处计算的字节数。通常,读、写操作都从当前文件偏移量处开始,并使偏移量增加所读写的字节数。

头文件

#include <sys/types.h>
#include <unistd.h>

函数原型

off_t lseek(int fd, off_t offset, int whence);

参数

int fd : 文件描述符
off_t offset : 相对于whence的偏移值,负数表示向左,正数表示向右,0表示原地
int whence : 固定点的位置

whence 有三个固定的宏:
在这里插入图片描述

lseek(fd,0,SEEK_SET)//相对于文件头偏移0,固定到头
lseek(fd,0,SEEK_CUR)//相对于文件当前位置偏移0,固定到当前位置
lseek(fd,0,SEEK_SET)//相对于文件最后偏移0,固定到最后

返回值

当调用成功则返回目前的读写位置,也就是当前位置距离文件开头有多少个字节,如果有错误则返回 -1

在这个代码中

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main()
{
    int fd;
    char* buf = "hello world!";
    char* readBuf = NULL;

    fd = open("./file2",O_RDWR);                                                                                             
    printf("creat file2 success %d\n",fd);

    int n_write = write(fd,buf,strlen(buf));        
    printf("write %d\n",n_write);          //打印写入到file2的字节个数

    //close(fd);                                //关闭文件
    //fd = open("./file2",O_RDWR);      //重新打开,让光标回到头,不然读不到数据
    lseek(fd,0,SEEK_SET);
    readBuf = (char*)malloc(sizeof(char) * n_write); //为readBuf开辟空间 
    int n_read = read(fd,readBuf,n_write);            //fd指向的文件读到readBuf中
    printf("readNum %d n_read = %s\n",n_read,readBuf); //打印读取到的字节个数和读到的数据

    close(fd);
    return 0;
}

在这里插入图片描述
可以看到利用lseek函数实现了将光标从字符串的最后移动到了最前面,当然,也可以将文件先关闭,再打开也可以将光标移动到最前面(这里如果不移动光标的话会读不到数据)。

利用lseek函数计算文件的字节数

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
    int fd;
    int lseekNum = 0;
    fd = open("./file2",O_RDWR);
    lseekNum = lseek(fd,0,SEEK_END);
    printf("file2 size %d\n",lseekNum);
    close(fd);
    return 0;
}

在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux系统编程——文件编程(四)光标移动(lseek) 的相关文章

随机推荐

  • 正确理解MySQL的MVCC及实现原理

    MVCC多版本并发控制 目录 MVCC多版本并发控制 前提概要 什么是MVCC 什么是当前读和快照读 当前读 快照读和MVCC的关系 MVCC的实现原理 隐式字段 undo日志 Read View 读视图 整体流程 MVCC相关问题 RR是
  • GlobalCorsConfig跨域文件

    package com config import org springframework context annotation Bean import org springframework context annotation Conf
  • Zabbix的基本使用

    文章目录 一 认识Zabbix 1 简介 2 功能 3 架构 4 数据流 二 项目 1 软件安装和环境部署 2 Zabbix工具的使用 1 创建被控主机 2 中文乱码修复 3 自动发现主机 4 自动注册主机 3 zabbix的API调用 4
  • Pandas中DataFrame的基本操作(增删)

    这是一篇最基础的Pandas用法总结 也方便自己日后进行复习与查询 这一次我们来总结一下Pandas中的一些增删改基本操作 df pd DataFrame F 90 88 85 M 75 97 74 F 82 73 91 M 93 99 9
  • Nginx的rewrite重写跳转和location匹配

    目录 常用的Nginx 正则表达式 location大致可以分为三类 location 常用的匹配规制 location优先级 location示例说明 实际网站使用中 至少有三个匹配规则定义 第一个必选规则 第二个必选规则是处理静态文件请
  • 设计模式-01-模糊理解

    一 概念 设计模式 别人都说它们就像是一个个的模型胚子 不管你们是多么的杂乱无章 只要经过它们的改造 表现出来的就都会是工工整整 标标准准的 而我觉得更确切的比喻应该是像一个制砖块儿的模具 虽然我们不知道为什么砖块儿 不仅要结实 也要外表光
  • python换零钱_Python3算法实例 1.2:动态规划 之 换零钱

    money jpg 问题 基础版 把100元兑换成1元 2元 5元 10元 20元 50元的零钱 共有多少种不同换法 动态规划思想解析 拆解子问题 下面以5元换成1 2 3元的零钱为例 T change target 表示用零钱序列chan
  • mybatisPlus之getById和selectById查询不出结果

    最终导致查询不出结果的原因可能有多种 我这里说出我遇到的一种原因 希望对你有帮助 我是因为在数据库添加了一个字段 没有及时地更新mapper xml中的resultMap导致的 大晚上的写代码 脑子不太好使 2 最近又遇到了一种情况 我数据
  • C 语言设置 Console 文字和背景的颜色的方法

    最近写的一个程序需要在 Console 窗口中输出大量的信息 大量的信息混在一起看着实在是费劲 因此就想到不同的信息用不同的颜色来输出 上网查了一番 win32 API 中有一个函数 SetConsoleTextAttribute 可以做这
  • 【目标检测】49、YOLOF

    文章目录 一 背景 二 方法 2 1 使用 SiSo 代替 MiMo 2 2 使用 Uniform matching 代替 Max IoU matching 2 3 YOLOF 的结构 三 效果 论文 You Only Look One l
  • linux常用命令-part2

    Ubuntu Fedora Debian CentOS中文怎么发音 有奔头 费德勒 迪扁 桑托斯 乌版图 菲朵拉 德槟 森头斯 使用find和wc命令统计代码行数 wc l find name js xargs 查看当前目录下文件的个数 l
  • 【用YOLOv3-tiny对TT100K进行训练】

    用YOLOv3 tiny对TT100K进行训练 数据集的处理 TT100K YOLO Label代码如何使用 修改数据集的配置文件 开始训练 训练意外中断怎么办 第一次跑代码 过程艰辛 值得记录 数据集的处理 YOLO对于数据集标签的格式有
  • oracle11g在没DNS情况下failover的配置方法

    1 Oracle 11g引入scan ip 可在没有DNS的情况下 客户端连接RAC配置failover时 很多情况还是使用oracle10g方式 即在客户端tnsname ora中配置failover 1 当客户端配置如下时 连接的实例关
  • 直线电机原理动画_直线振动筛工作原理结构图以及结构解析

    很多用户在使用直线振动筛的时都没有好好的研究过 该设备有哪些结构特点 从而造成了很多的使用上的问题 那么今天小编就为大家简单的介绍一下 如下所示 1 工作原理 直线振动筛为双电机驱动 利用电机里的偏心块的振动带动筛网和物料的振动 从而完成物
  • python summary结果提取_从Python中的OLS Summary获取DurbinWatson和JarqueBera统计信息

    OLS是一个运行值的汇总列 OLS的一部分是Durbin Watson和Jarque Bera JB 的统计数据 我想直接提取这些值 因为它们已经被计算出来了 而不是像我现在对durbinwatson那样运行这些步骤 在 下面是我的代码 i
  • 【力扣】455、分发饼干

    var findContentChildren function g s g 孩子的胃口 s 饼干尺寸 let arr g sort a b gt return a b let brr s sort a b gt return a b 初始
  • 【Flutter】十八、Flutter中常用的布局容器——列表布局ListView、ListTile

    一 ListView 1 1 创建ListView的多种方式 1 1 1 ListView 1 1 2 ListView builder 1 1 3 ListView separated 1 1 4 ListView custom 二 Li
  • 【P186 20】C++ 容器快速入门 (vector、deque、list、map、set...)(超详细)

    P186 20 C 容器快速入门 一 vector容器 1 vector存放内置数据类型 1 六种遍历方式 六种遍历方式 完整代码总览 部分遍历详解 2 初始化 区别 1 默认初始化 无参 没给定数组大小 2 带参数构造初始化 给定数组大小
  • 小物体的目标检测的研究综述

    关于小目标检测算法的研究综述 小目标研究的难点 小目标研究算法的现状 自己对于小目标算法的理解 小目标检测的难点 在我们平常的数据集中 大多数都是中等和偏大的物体 小目标属性相对偏少 小目标在原始图像中一般只占0 02 0 05左右 而我们
  • Linux系统编程——文件编程(四)光标移动(lseek)

    lseek函数 lseek是一个用于改变读写一个文件时读写指针位置的一个系统函数 每个打开的文件都有一个与其相关联的 当前文件偏移量 它通常是一个非负整数 用以度量从文件开始处计算的字节数 通常 读 写操作都从当前文件偏移量处开始 并使偏移