这是一个创建于 3896 天前的主题,其中的信息可能已经有所发展或是发生改变。
这几天看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
|
|
1
wwwjfy 2014-04-24 13:36:34 +08:00
/home是mount的,应该有关系,看看ls源码
|
|
|
2
ikimi 2014-04-24 18:22:02 +08:00
|