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映射。