• Linux文件编程(lseek函数和stat函数)



    前言

    本篇文章来讲解lseek函数和stat函数,lseek函数主要用来设置文件偏移量,stat函数主要用来获取文件属性。

    一、lseek函数

    lseek 函数用于在打开的文件中移动文件指针的位置。它可以用于设置文件的读写位置或查找特定位置的数据。

    函数原型如下:

    #include 
    
    off_t lseek(int fd, off_t offset, int whence);
    
    • 1
    • 2
    • 3

    其中,fd 是需要进行定位的文件描述符;offset 是指定的偏移量;whence 参数指定了基准位置。

    lseek 函数的基准位置(whence)参数可以取三个标志之一:

    SEEK_SET:基于文件开头设置偏移量。此时,偏移量就是从文件开头开始的字节数。
    SEEK_CUR:基于当前文件指针位置设置偏移量。此时,偏移量为当前位置加上给定的偏移量。
    SEEK_END:基于文件末尾设置偏移量。此时,偏移量为文件长度加上给定的偏移量。

    lseek 函数的返回值为新的文件指针的位置。如果出现错误,返回值为-1。

    lseek 函数的主要作用如下:

    设置文件指针位置:通过指定不同的偏移量和基准位置,lseek 函数可以在文件中设置文件指针的位置。这样可以控制后续的读写操作从特定位置开始。

    查找文件位置:通过将偏移量设置为0并指定正确的基准位置,lseek 函数可以用于查找特定位置的数据,而无需进行实际的读写操作。

    需要注意的是,lseek 函数对不支持定位的文件(如终端设备、管道)执行时可能会返回错误。此外,使用 lseek 函数时应确保文件打开模式允许寻位操作。

    使用示例:

    上篇文章我们其实是使用到了这个函数的,这里就讲解一下上篇文章中这个函数的作用。

    在读取文件内容时把读写位置设置到文件的开头,假如不使用这句话的话那么将会从Hello后面开始读取数据,那么将会读取到空的数据。

     lseek(fd, 0, SEEK_SET);
    
     len = read(fd, buf, 1024);
    
    • 1
    • 2
    • 3

    使用lseek也可以来获取文件的长度:

    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    int main(void)
    {
        int fd = 0;
        char buf[1024];
        int len = 0;
    
        fd = open("1.txt", O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); //打开文件,如果不存在则创建文件为可读可写,并且将文件内容全部清除
    
        if(fd == -1)
        {
            printf("open 1.txt is err\n");
            return -1;
        }
    
        len = write(fd, "Hello", 6);
        if(len == -1)
        {
            printf("write err\n");
        }
    
        len = lseek(fd, 0, SEEK_END);
    
        printf("len : %d\n", len);
    
        return 0;
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    在这里插入图片描述

    二、stat函数

    stat 函数(或 fstat 函数)是用于获取文件的信息和状态的函数。它提供了关于文件的元数据,例如文件大小、权限、创建时间等信息。

    函数原型如下:

    #include 
    #include 
    int stat(const char *path, struct stat *buf);
    int fstat(int fd, struct stat *buf);
    
    • 1
    • 2
    • 3
    • 4

    其中,stat 函数用于传入文件路径 path,而 fstat 函数用于传入文件描述符 fd。两个函数的参数 buf 是一个 struct stat 类型的结构体指针,用于存储获取到的文件信息。

    struct stat 结构体中包含了各种文件信息的成员,例如:

    st_mode:文件类型和权限模式。
    st_size:文件大小(以字节为单位)。
    st_uid:文件所有者的用户 ID。
    st_gid:文件所有者所在组的组 ID。
    st_atime:最后访问时间。
    st_mtime:最后修改时间。
    st_ctime:最后更改(状态修改)时间。
    可以使用这些成员来获取有关文件的详细信息。

    以下是一个使用 stat 函数获取文件信息的简单示例:

    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    int main(void)
    {
        const char *path = "1.txt";
        struct stat fileStat;
    
        if (stat(path, &fileStat) == -1) 
        {
            perror("stat");
            return 1;
        }
    
        printf("File Size: %lld bytes\n", fileStat.st_size);
        printf("File Permissions: %o\n", fileStat.st_mode & 0777);
        printf("File Owner UID: %d\n", fileStat.st_uid);
        printf("File Owner GID: %d\n", fileStat.st_gid);
        printf("Last Access Time: %s", ctime(&fileStat.st_atime));
        printf("Last Modification Time: %s", ctime(&fileStat.st_mtime));
        printf("Last Status Change Time: %s", ctime(&fileStat.st_ctime));
    
        return 0;
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    运行结果:
    在这里插入图片描述

    总结

    本篇文章就讲解到这里,下篇文章我们继续讲解文件操作的内容。

  • 相关阅读:
    怎么把视频转换成音频
    编辑SRT字幕,添加在视频中播放
    计算机网络学习笔记(II)——应用层
    Vue 项目快速上手
    JAVA毕业设计HTML5“牧经校园疫情防控网站”设计与实现计算机源码+lw文档+系统+调试部署+数据库
    【JAVA后端开发】Part2--瑞吉外卖项目(员工管理)
    odoo javascript参考(八)
    【案例实践】HEC-RAS 1D/2D水动力与水环境模拟、HEC-RAS与HEC-FDA耦合、桥梁分析、泄洪道设定
    代码随想录二刷 Day42
    Vue3 实现文件预览 Word Excel pdf 图片 视频等格式 大全!!!!
  • 原文地址:https://blog.csdn.net/m0_49476241/article/details/131892152