该代码实现了根据文件的inode号码获取文件名的功能。具体实现如下:

  1. 定义了一个函数 get_inode(char *fname),该函数的功能是获取指定文件的inode号码。它通过调用系统函数 stat() 来获取文件信息,如果获取失败则输出错误信息并退出程序,否则返回文件的inode号码。

  2. 定义了一个函数 inum_to_name(ino_t inode_to_find, char* name, int buflen),该函数的功能是根据指定的inode号码在当前目录下查找对应的文件名。它通过调用系统函数 opendir() 打开当前目录,然后调用系统函数 readdir() 遍历目录中的每个文件,如果找到了inode号码相符的文件,则将文件名复制到指定的 name 字符数组中,并返回。如果遍历完整个目录都没有找到对应的文件,则输出错误信息并退出程序。

  3. 在主函数中,首先调用 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;
}

C语言实现根据inode号码获取文件名

原文地址: https://www.cveoy.top/t/topic/n4lW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录