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

摘自:https://blog.csdn.net/qq_15897815/article/details/86601573

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查到的一样:

 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值