V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ikimi
V2EX  ›  问与答

ls -i 的一个问题

  •  
  •   ikimi · 2014-04-24 13:19:33 +08:00 · 2448 次点击
    这是一个创建于 3860 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这几天看APUE讲到目录结构的地方,目录用来存储此目录下的 文件/目录 的inode节点号及其名字。
    所以我就写了一个简单的遍历某个目录的程序:
    #include <dirent.h>
    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char *argv[])
    {
    DIR *dp;
    struct dirent *dirp;

    if (argc != 2)
    {
    printf("usage: directory path\n");
    exit(-1);
    }

    if ((dp = opendir(argv[1])) == NULL)
    {
    printf("open directory error\n");
    exit(-1);
    }

    while ((dirp = readdir(dp)) != NULL)
    {
    printf("%d %s\n", dirp->d_ino, dirp->d_name);
    }

    exit(0);
    }

    -------------------------------------------
    编译后执行:./a.out / (即查看根目录下的文件/目录的 inode 号)
    结果如下:(截取)
    1048577 home
    131073 lib
    12 initrd.img
    655361 sys
    1179649 sbin
    1310721 usr
    2 .
    .......
    --------------------------------------------
    下面使用ls的命令ls -i 来查看 / 目录下的 文件/目录的 inode 号
    kimi@kimi:ls -i /
    结果如下:(截取)
    2359297 bin 11 lost+found 2228225 srv
    2 boot 786433 media 1 sys
    524290 cdrom 2883585 mnt 1835009 tmp
    1025 dev 393217 opt 1310721 usr
    1703937 etc 1 proc 1966081 var
    2 home
    --------------------------------------------
    问题出现了:自己的程序显示home的inode号是 1048577,而 ls -i 显示home的inode号是2。
    Why?

    PS:发现这个问题是在自己实现 char *getcwd()函数时发现的,详见APUE中文版第二版 P103。
    2 条回复    1970-01-01 08:00:00 +08:00
    wwwjfy
        1
    wwwjfy  
       2014-04-24 13:36:34 +08:00
    /home是mount的,应该有关系,看看ls源码
    ikimi
        2
    ikimi  
    OP
       2014-04-24 18:22:02 +08:00
    @wwwjfy 恩 可能是这个原因 我看看~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2816 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 08:34 · PVG 16:34 · LAX 00:34 · JFK 03:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.