
readdir如何获取inode号
时间:2026-07-15
在Linux环境下,`readdir`函数是遍历目录时最常用的工具之一。不过,它本身并不直接返回文件的inode号——这倒不是设计缺陷,而是职责划分:`readdir`只管把目录项枚举出来,更底层的元数据信息,得交给其他系统调用。
那么,想要拿到目录中每个文件的inode号,该怎么组合操作?下面通过一个完整示例来说明。
#include
#include
#include
#include
int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage: %s \n", argv[0]);
return 1;
}
DIR *dir = opendir(argv[1]);
if (dir == NULL) {
perror("opendir");
return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
struct stat file_stat;
char path[PATH_MAX];
snprintf(path, sizeof(path), "%s/%s", argv[1], entry->d_name);
if (stat(path, &file_stat) == -1) {
perror("stat");
continue;
}
printf("File: %s, Inode: %lu\n", entry->d_name, (unsigned long)file_stat.st_ino);
}
closedir(dir);
return 0;
}
```
这个程序接受一个目录路径作为命令行参数,遍历其中所有条目(包括`.`和`..`),对每个文件调用`stat`,然后输出文件名和对应的inode号。编译运行后,效果类似这样:
```
$ gcc inode_example.c -o inode_example
$ ./inode_example /path/to/directory
File: file1.txt, Inode: 1234567
File: file2.txt, Inode: 2345678
...
```
需要说明的是,这段代码是针对Linux系统的。在其他类Unix系统(比如macOS)上,头文件或某些接口的细节可能略有差异,但核心思路是一致的——`readdir` + `stat` 组合,就能拿到inode号。
本文转载于:https://www.yisu.com/ask/37360848.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。