我正在进行Unix编程练习,找出目录及其父目录的i-node编号,我知道命令“ls -ldi”满足我的要求,但正如我所说我正在进行Unix编程练习想进一步了解它,所以我写下面的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
int
main(int argc, char *argv[])
{
DIR *dp;
struct dirent *dirp;
if(argc != 2)
fprintf(stderr, "usage: ex1 directory_name");
if((dp = opendir(argv[1])) == NULL)
fprintf(stderr, "can't open %s", argv[1]);
while((dirp = readdir(dp)) != NULL)
if(strcmp(dirp->d_name, ".") == 0 || strcmp(dirp->d_name, "..") == 0)
printf("inode number of %s is %llu\n", dirp->d_name, dirp->d_ino);
closedir(dp);
exit(0);
}
我只检查给定路径的所有条目,并比较名称是点还是点,如果是,则打印出它的d_ino。
以下是我感到困惑的事情: 如果我运行“./a.out。”,这就像“ls -ldi。”那样,意味着它们都给出当前目录的i节点号及其父目录,但如果我运行“./a。 out /“期望找出根目录及其父目录的索引节点号,然后我的程序打印i-node number为”。“和1为“..”但命令“ls -ldi /。”和“ls -ldi / ..”都打印2。
所以我想知道为什么会这样。
谢谢!