C编程:如果我知道索引节点号,如何获取目录名
如果我知道目录名是索引节点号,如何获取它?我需要密码。谢谢 下面的代码通过C编程:如果我知道索引节点号,如何获取目录名,c,linux,unix,inode,C,Linux,Unix,Inode,如果我知道目录名是索引节点号,如何获取它?我需要密码。谢谢 下面的代码通过传递了dir\u name.,然后我得到了它的I节点号,但我还需要的是目录名 /*child stat*/ stat(dir_name, &sb); if (stat(dir_name, &sb) == -1) { perror("stat"); exit(EXIT_FAILURE); } childIno = (long) sb.st_ino; 除非您有索引将inode映射到名称,否则您
传递了dir\u name.
,然后我得到了它的I节点号,但我还需要的是目录名
/*child stat*/
stat(dir_name, &sb);
if (stat(dir_name, &sb) == -1) {
perror("stat");
exit(EXIT_FAILURE);
}
childIno = (long) sb.st_ino;
除非您有索引将inode映射到名称,否则您必须递归地遍历目录结构,直到找到一个包含您要查找的inode的名称(您可能找不到)
如果程序的一部分已经知道目录的名称,您应该找到一种方法将其传递到代码中。不确定您是否可以仅从inode编号轻松获取它。很多东西可能指向同一个inode(硬链接、软链接等)。如果您只是在寻找一个可以打印出来并感觉良好的路径,那么可以使用realpath。下面的例子很容易在Ubuntu 12.04上编译,也可以在BSD系统上使用
realpath
将吃掉所有的。/
和/
内容,从而生成一条外观良好的路径(但不一定是唯一的路径)
#include <stdlib.h>
#include <stdio.h>
int main( int argc, char *argv[] ){
char *test_path = realpath( "..", NULL );
if ( test_path ) {
printf( "Path resolves to %s\n", test_path );
} else {
printf( "Couldn't resolve path\n" );
}
exit(0);
}
#包括
#包括
int main(int argc,char*argv[]){
char*test_path=realpath(“..”,NULL);
if(测试路径){
printf(“路径解析为%s\n”,测试路径);
}否则{
printf(“无法解析路径\n”);
}
出口(0);
}
inode到路径不是1:1映射。