ls -i 的一个问题

2014-04-24 13:19:33 +08:00
 ikimi
这几天看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。
2452 次点击
所在节点    问与答
2 条回复
wwwjfy
2014-04-24 13:36:34 +08:00
/home是mount的,应该有关系,看看ls源码
ikimi
2014-04-24 18:22:02 +08:00
@wwwjfy 恩 可能是这个原因 我看看~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/109829

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX