博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux系统编程之管理目录与文件的stat函数组
阅读量:4082 次
发布时间:2019-05-25

本文共 1643 字,大约阅读时间需要 5 分钟。

摘自:

Linux系统编程之管理目录与文件的stat函数组

不见而明 2019-01-22 21:36:47 133 已收藏
展开

在ubuntu中,我们可以通过ls相关命令查看文件和目录的有关信息,如使用ls -ail,我们可以看到文件的相关信息,如下图所示,那么,我们如何通过编程提取相关文件的信息呢?此时,就可以用stat函数来实现这个功能。

首先,我们通过man命令来查看下stat相关函数组,使用命令man 2 stat就可以看到如下信息:

从以上图中,我们可以看到,包含了stat,fstat,lstat三个函数。往下翻,可以看到有一个结构体:

这个结构体就包含了我们可以获得某个文件的相关信息。再往下翻,可以看到函数的返回值:

成功则返回0,失败返回-1;

这里我们以stat为例说明一下:

stat函数需要两个参数,第一个参数是文件路径,也就是我们需要查询的文件的路径,第二个参数是一个结构体参数,我们在使用stat函数后,会返回第一个参数所在路径的文件的相关信息,这些信息保存在这个结构体中,这个结构体变量的值就是文件对应的信息。

接下来是一个对这三个函数使用的demo,这个demo使用三个函数查看文件的索引号:

#include <sys/types.h>

#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>

int main(int argc, char *argv[])
{
    struct stat groupstat;
    int fd, ret;
    
    if(argc < 2)
    {
        printf("\ninput file path!\n");
        return 0;
    }
    
//stat test
    ret = stat(argv[1], &groupstat);
    if(ret)
    {
        printf("please make sure file path!\n");
        return 0;
    }
    printf("stat function test ,%s of st_ino is %ld!\n",argv[1], groupstat.st_ino);

//fstat test

    fd = open(argv[1], O_RDWR|O_NOCTTY|O_NDELAY);
    if(fd < 0)
    {
        printf("please make sure file path!\n");
        return 0;
    }
    ret = fstat(fd, &groupstat);
    if(ret)
    {
        printf("please make sure file path!\n");
        return 0;
    }
    printf("lstat function test ,%s of st_ino is %ld!\n",argv[1], groupstat.st_ino);

//lstat test

    ret = lstat(argv[1], &groupstat);    
    if(ret)
    {
        printf("please make sure file path!\n");
        return 0;
    }
    printf("fstat function test ,%s of st_ino is %ld!\n",argv[1], groupstat.st_ino);

    return 0;

}

编写完后,再通过编译,生成可执行文件:

然后执行可执行文件,查看stat.c文件的索引号:

我这个实在Itop4412上面实现的,也可以在ubuntu上实现。

Ubuntu上实现如下:

使用编译命令gcc stat.c -o stat生成可执行文件stat,然后运行stat,后面加上你想要查询的文件的路径,这里是同一文件夹下的stat.c文件,获取到的索引号为353929,与我们用 ls -i查到的一样:

 

 

转载地址:http://egani.baihongyu.com/

你可能感兴趣的文章
一个设计项调用另一个设计项的(列表界面支持多选)
查看>>
JS 算法一
查看>>
springboot启动配置原理之二(运行run方法)
查看>>
OA项目(MVC项目)
查看>>
python——进程基础
查看>>
iphone开发中的手势操作:Swipes
查看>>
MVC中Code First编程一些小技巧
查看>>
教程-隐藏/显示任务栏-程序不在任务显示-全面控制Windows
查看>>
JavaScript学习总结(十二)——JavaScript编写类
查看>>
enq: JI - contention等待事件
查看>>
ETCD-内部原理
查看>>
vs2017 编译linux项目
查看>>
网络工程实训终期
查看>>
【RS】Improving Implicit Recommender Systems with View Data - 使用浏览数据提升隐式推荐系统...
查看>>
C#代码试运行在服务器端----JS代码是运行在浏览器端
查看>>
UVAlive 7414 Squeeze the Cylinders a,b,c三种步数 搜索+最短路
查看>>
高通计划停用MSM 以SDM为移动平台命名【转】
查看>>
Collection View Programming Guide for iOS---(二)----Collection View Basics
查看>>
Travelling
查看>>
android中activity向service中传值
查看>>