本文共 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/