在UNIX下面的文件夹中总有两个文件..和.,这两个分别代表了本目录和上一级的目录。而在根目录中,由于根目录没有上一级的目录,所以根目录中的..和.是相同的。这个要怎么验证么,主要就是通过查看inode,在ext系列文件系统中,inode唯一地标识了一个文件或者一个文件夹。那么我想要通过c程序来验证,该怎么做呢,代码如下:
#include<sys/types.h> #include<dirent.h> #include<string.h> #include<stdlib.h> #include<stdio.h> int main(int argc,char *argv[]) { DIR *dp; //打开目录的句柄 struct dirent *dirp; //保存打开目录信息的结构 if((dp=opendir("/")) == NULL) //打开根目录,如果无法打开,则输出错误信息 { printf("Can't open the directory /!\n"); exit(-1); } while((dirp=readdir(dp)) != NULL) //从根目录中不断读取文件名 { if((strcmp(dirp->d_name,".")==0) || (strcmp(dirp->d_name,"..")==0)) //如果遇到..和.文件,则输出inode和文件名 { printf("%s's inode is %d\n",dirp->d_name,dirp->d_ino); } } closedir(dp); //关闭目录句柄 return 0; }
这个思路主要是这样的,打开一个目录,然后不断读取这个目录中的文件名,如果文件名是.或者..的话,那么就把这个文件的名字和它的inode一起输出,这样就能够看到..和.这两个文件的inode是相同的了,运行结果如下: