iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >Linux系统调用之lseek函数
  • 727
分享到

Linux系统调用之lseek函数

linux运维服务器 2023-08-18 14:08:28 727人浏览 独家记忆
摘要

前言 如果,想要深入的学习linux系统调用函数lseek了话,还是需要去阅读Linux系统中的帮助文档的。 具体输入命令: man 2 lseek 即可查阅到完整的资料信息。 lseek函数 lseek函数是Linux系统api中的

前言

如果,想要深入的学习linux系统调用函数lseek了话,还是需要去阅读Linux系统中的帮助文档的。
具体输入命令:

man 2 lseek

即可查阅到完整的资料信息。

lseek函数

lseek函数是Linux系统api中的一员,它的官方定义是:重新定位读或写的文件偏移量。
这里科普一下什么叫做当前文件偏移量:

  • 每当打开一个文件,都会有一个叫做“当前文件偏移量”的东西,如果难理解也可以将他理解为指针。 除非打开文件时指定O_APPEND选项,否则文件偏移量默认设置为0。当我们发生了一次读或者写操作时,都会使这个当前文件偏移量发生变化,读/写多少字节,当前偏移量就会向后移动多少。

知道了这个概念了后,我们就了解了lseek函数它有些什么作用。下面我们来细细介绍一下这个函数。

它的函数原型是长这样的:

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

先来说一下这个off_t类型吧,它用于指示文件的偏移量。你可以就简单的理解为这是一个64位的整形数,相当于long long int,其定义在unistd.h头文件中可以查看。

在使用这个函数之前,我们需要往C/C++文件中导入这些头文件:

#include
#include

通过lseek函数的函数原型我们可以知道,我们需要给它传入3个参数,那我们依次介绍这三个参数是什么,有什么含义在里面。

  • PS:题外话,如果有听不懂的地方,请自行查阅Linux帮助文档,开头有些查阅方法,一手知识永远是最好的知识。

参数:fd //文件描述符,可以通过open函数得到,通过这个fd可以操作某个文件
参数: offset //文件偏移量,是一个整形数
参数:whence //偏移类型,下列三个值中选一个。

whence :
SEEK_SET:该文件的偏移量设为离文件开头offset个字节.
SEEK_CUR:该文件的偏移量设为其当前值加offset(PS :offest可正负).
SEEK_END:该文件的偏移量设为文件长度加offset

再来聊一下返回值:

如果成功:返回文件指针的位置
如果失败:返回-1,并将错误原因赋值给errno,我们可以用标准C库中的perror函数打印出错误原因。需要引入头文件 #include

lseek函数的作用

lseek函数的作用有以下四点:

  • 移动文件指针到文件头:

    lseek(fd, 0, SEEK_SET);

  • 获取当前文件指针的位置

    lseek(fd, 0, SEEK_CUR);

  • 获取文件长度

    lseek(fd, 0, SEEK_END);

  • 拓展文件的长度,当前文件10b, 110b, 增加了100个字节

    lseek(fd, 100, SEEK_END)
    注意:拓展完需要再写一次数据,否则拓展无效

光这样介绍不可能学的会,我们来通过一个实战例子来彻底了解一下这个lseek函数

实战演练:lseek函数

作用1:移动文件指针到文件头:

//导入所有需要的头文件#include #include #include #include #include //我们的目的是:移动文件指针到文件头:int main(){    //获取文件的文件描述符    int fd = open("text.txt", O_RDWR);    if (fd == -1)    {        perror("open");        return -1;    }    //输出当前文件的偏移量    long long int loc = lseek(fd, 0, SEEK_CUR);    printf("%lld\n", loc);    //使用read函数读3个字节的数据    char buf[3] = {0};    int rnum = read(fd, buf, sizeof(buf));    printf("%d\n", rnum);    //再次查看文件的偏移量    long long int loc1 = lseek(fd, 0, SEEK_CUR);    printf("%lld\n", loc1);        //移动文件指针到文件头    long long int loc2 = lseek(fd, 0, SEEK_SET);    printf("%lld\n", loc2);    return 0;}

作用2:获取当前文件指针的位置

//导入所有需要的头文件#include #include #include #include #include int main(){    //导入所有需要的头文件#include #include #include #include #include int main(){    //获取文件的文件描述符    int fd = open("hello.txt", O_RDWR);    //输出当前文件的偏移量    long long int loc = lseek(fd, 0, SEEK_CUR);    printf("%lld\n", loc);    //使用read函数读2个字节的数据    char buf[2] = {0};    int rnum = read(fd, buf, sizeof(buf));    printf("%d\n", rnum);        //再次查看文件的偏移量    long long int loc1 = lseek(fd, 0, SEEK_CUR);    printf("%lld\n", loc1);    return 0;}}

作用3:获取文件长度

//导入所有需要的头文件#include #include #include #include #include int main(){    //获取文件的文件描述符    int fd = open("hello.txt", O_RDWR);    //获取文件长度    long long int loc1 = lseek(fd, 0, SEEK_END);    printf("%lld\n", loc1);    return 0;}

作用4:拓展文件的长度(注:拓展完需要再写一次数据,否则拓展无效)

//导入所有需要的头文件#include #include #include #include #include int main(){    //获取文件的文件描述符    int fd = open("hello.txt", O_RDWR);    //获取文件长度    long long int loc1 = lseek(fd, 0, SEEK_END);    printf("%lld\n", loc1);    //拓展文件的长度    long long int loc2 = lseek(fd, 100, SEEK_END);    write(fd," ",1);//写入一个空数据    printf("%lld\n", loc2);    return 0;}

总结

当明白了当前文件偏移量这个概念了以后,lseek函数也变的并不是那么难理解了。仔细试了一下lseek函数的功能还挺好玩的。

来源地址:https://blog.csdn.net/weixin_49503250/article/details/129049737

--结束END--

本文标题: Linux系统调用之lseek函数

本文链接: https://www.lsjlt.com/news/374221.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux系统调用之lseek函数
    前言 如果,想要深入的学习Linux系统调用函数lseek了话,还是需要去阅读Linux系统中的帮助文档的。 具体输入命令: man 2 lseek 即可查阅到完整的资料信息。 lseek函数 lseek函数是Linux系统API中的...
    99+
    2023-08-18
    linux 运维 服务器
  • linux系统下lseek函数的详细用法
    lseek函数用于在文件中定位文件偏移量。其原型为:```c#include off_t lseek(int fd, off_t o...
    99+
    2023-08-24
    linux
  • Linux lseek函数的使用详解
    注:如果文章内容有误,请留言指出,谢谢合作。 名字 Name : lseek - reposition read/write file offset lseek函数的作用是用来重新定位文件读写的位移。 头文件以及函数声...
    99+
    2022-06-04
    Linux lseek函数 Linux lseek
  • linux下lseek函数怎么使用
    lseek函数用于设置文件指针的偏移量。其函数原型为:```c#include off_t lseek(int fd, off_t ...
    99+
    2023-08-25
    linux lseek
  • linux怎么调用系统内核函数
    在Linux中,可以通过系统调用来调用系统内核函数。系统调用是用户程序和内核之间的接口,用于请求内核执行特定操作。 在C语言中,可以...
    99+
    2023-10-24
    linux
  • Linux系统调用之fork,getpid,getppid函数(进程相关函数,与G老师的对话,必看!)
    前言 如果,想要深入的学习Linux系统调用中的fork,getpid,getppid函数,还是需要去自己阅读Linux系统中的帮助文档。 具体输入命令: man 2 fork/getpid/ge...
    99+
    2023-10-25
    linux 运维 服务器
  • Linux之操作文件的系统调用
    目录1.打开文件参数介绍2. 读文yXLlS件3. 写文件4.关闭分析题练习题系统调用和库函数的区别需要引入的头文件: #inlcude<unistd.h> 1.打开文件 打开一个已存在的文件 i...
    99+
    2022-06-04
    linux文件操作系统调用 linux操作文件
  • PHP函数的Linux系统函数
    PHP是一种广泛使用的服务器端编程语言。它具有广泛的应用,在网络编程、数据库操作、文件处理等方面具有非常强大的功能。PHP内置了很多函数,可以直接调用来完成各种任务。其中,与Linux系统相关的函数具有很重要的地位。在本文中,我们将详细介绍...
    99+
    2023-05-18
    编程 PHP函数 Linux系统函数
  • linux调用系统内核函数的方法是什么
    在Linux中,调用系统内核函数的方法主要有以下几种:1. 使用系统调用(system call):系统调用是用户程序通过软中断(软...
    99+
    2023-10-18
    linux
  • SQLServer系统函数之字符串函数
    一.字符串函数 参数character_expression:由字符数据组成的字母数字表达式,可以是常量或变量,也可以是字符列或二进制数据列 参数integer_expression:是正整数,如果 integer_express...
    99+
    2015-03-15
    SQLServer系统函数之字符串函数
  • Linux系统open函数有什么用
    这篇文章主要介绍了Linux系统open函数有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Linux系统中open函数主要作用就是打开和创建文件,可以根据参数来定制我...
    99+
    2023-06-28
  • linux系统编程之信号竞态条件与sigsuspend函数
    在Linux系统编程中,信号竞态条件是指当多个进程或线程同时对共享的数据进行读写操作时,由于操作的顺序不确定而导致的问题。在信号处理...
    99+
    2023-09-20
    Linux
  • Python 之调用系统命令
    在python中执行系统命令的方法有以下几种:1.os.system(command)>>> s = os.system('ls -l') 总用量 56 drwxr-xr-x. 2 root root 4096 4月 ...
    99+
    2023-01-31
    命令 系统 Python
  • 如何使用Excel调用ABAP系统的函数
    小编给大家分享一下如何使用Excel调用ABAP系统的函数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!效果:在excel里创建一个按钮,开发一些VB scrip...
    99+
    2023-06-05
  • Linux系统shell函数该如何使用
    这篇文章主要为大家分析了Linux系统shell函数该如何使用的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Linux系统shell函数该如何使用”的知识吧...
    99+
    2023-06-28
  • python调用linux系统命令
    python3脚本代码如下# !/usr/bin/python# -.- coding: utf-8 -.-__author__ = 'www.py3study.com'import getpassimport osclas...
    99+
    2023-01-30
    命令 系统 python
  • Linux内核设备驱动之系统调用笔记整理
    (1)什么是系统调用 系统调用是内核和应用程序间的接口,应用程序要访问硬件设备和其他操作系统资源,必须通过系统调用来完成。 在linux中,系统调用是用户空间访问内核的唯一手段,除异常和中断外,他们是内核唯一的合...
    99+
    2022-06-04
    linux系统 linux调用 linux内核 linux系统调用 linux内核设备驱动 linux接口 linux应用程序
  • Linux系统stat函数的用法是什么
    Linux系统stat函数的用法是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。表头文件: #include     ...
    99+
    2023-06-28
  • linux钩子函数怎么调用
    在Linux中,钩子函数可以通过以下几种方式进行调用: 信号处理函数:可以使用signal()函数或sigaction()函数来...
    99+
    2023-10-24
    linux
  • Linux中Shell函数怎么调用
    本篇内容主要讲解“Linux中Shell函数怎么调用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux中Shell函数怎么调用”吧!Shell 函数的本质是一段可以重复使用的脚本代码,这段...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作