C语言实现根据inode号码获取文件名
该代码实现了根据文件的inode号码获取文件名的功能。具体实现如下:
-
定义了一个函数 get_inode(char *fname),该函数的功能是获取指定文件的inode号码。它通过调用系统函数 stat() 来获取文件信息,如果获取失败则输出错误信息并退出程序,否则返回文件的inode号码。
-
定义了一个函数 inum_to_name(ino_t inode_to_find, char* name, int buflen),该函数的功能是根据指定的inode号码在当前目录下查找对应的文件名。它通过调用系统函数 opendir() 打开当前目录,然后调用系统函数 readdir() 遍历目录中的每个文件,如果找到了inode号码相符的文件,则将文件名复制到指定的 name 字符数组中,并返回。如果遍历完整个目录都没有找到对应的文件,则输出错误信息并退出程序。
-
在主函数中,首先调用 get_inode() 函数获取指定文件的inode号码,然后调用 inum_to_name() 函数根据该inode号码查找对应的文件名,并将结果输出到屏幕上。
需要注意的是,本代码中的 ino_t 类型是一个特殊的整型类型,用于表示文件的inode号码。readdir() 函数返回的结构体 dirent 中包含了文件的inode号码和文件名等信息。在调用 strncpy() 函数复制文件名时,需要指定一个长度上限,以防止数组越界。
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<stdio.h>
#include<string.h>
#include<dirent.h>
ino_t get_inode(char *fname){
struct stat info;
if(stat(fname, &info) == -1){
printf("cannot stat");
exit(1);
}
return info.st_ino;
}
void inum_to_name(ino_t inode_to_find, char* name, int buflen)
{
DIR* dir_ptr;
struct dirent* direntp;
dir_ptr = opendir(".");
if(dir_ptr ==NULL){
printf("error in opendir");
exit(1);
}
while( (direntp=readdir(dir_ptr))!=NULL){
if(direntp->d_ino == inode_to_find){
strncpy(name, direntp->d_name, buflen);
name[buflen-1] = '\0';
closedir(dir_ptr);
return;
}
}
printf("error in looking for inum %d\n", inode_to_find);
exit(1);
}
int main(int argc, char* argv[])
{
char name[30];
inum_to_name(get_inode(argv[1]), name, 30);
//printf("info.st_ino=%d\n", get_inode(argv[1]));
printf("name=%s\n", name);
return 0;
}
原文地址: https://www.cveoy.top/t/topic/n4lW 著作权归作者所有。请勿转载和采集!