【问题标题】:C programming : How to get directory-name if I know the inode-numberC 编程:如果我知道 inode 号,如何获取目录名
【发布时间】:2014-07-27 05:06:45
【问题描述】:

如果我知道它的 inode 号,我如何获得目录名称?需要代码。谢谢。

下面的代码通过.. 传递了dir_name,然后我得到了它的i-node 编号,但我还想要的是目录名称。

/*child stat*/
stat(dir_name, &sb);
if (stat(dir_name, &sb) == -1) {
    perror("stat");
    exit(EXIT_FAILURE);
}
childIno = (long) sb.st_ino;

【问题讨论】:

  • inode 到路径不是 1:1 映射。

标签: c linux unix inode


【解决方案1】:

除非您有索引将 inode 映射到名称,否则您将不得不递归遍历目录结构,直到找到具有您正在寻找的 inode 的名称(您可能找不到)。

如果您的程序的一部分已经知道目录的名称,您应该找到一种方法将其传递到您的代码中。

【讨论】:

    【解决方案2】:

    不确定您是否可以仅从 inode 号轻松获取它。很多东西都可以指向同一个inode(硬链接、软链接等)。如果您只是在寻找可以打印出来并感觉良好的 a 路径,则可以使用 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);
    }
    

    【讨论】:

      猜你喜欢
      • 2011-01-10
      • 2011-12-20
      • 2011-06-04
      • 2014-07-26
      • 1970-01-01
      • 2013-01-26
      • 1970-01-01
      • 2014-07-25
      • 2019-01-19
      相关资源
      最近更新 更多