Linux文件系统数如下:

在 Linux 系统中,文件系统通过目录"包含"子目录及文件的方式,来组织成一个树状结构。那么目录到底是如何"包含"其他目录及文件的呢?

目录,在 Linux 中,其实也是一种文件,所以它也是由“inode+数据块”构成的。而其文件内容是一个列表,每一个列表项记录“inode-number+filename"。

因此,我们通常所说的目录 a "包含" 文件 b,其实现层面上的意思是,目录 a 的内容列表里有一个关于文件 b 的列表项,即 b 的 “inode-number+filename”。

综上,Linux 中,一个文件(包括目录)的文件名,及文件名与 inode 的对应关系,都是由包含该文件的目录所描述的。

下面的例子,演示了如何打印指定目录的内容列表:

/*
* 文件名:directory.c
* 描述: 打印指定目录的内容列表
*/ #include<stdio.h>
#include<stdlib.h>
#include<dirent.h>
#include<sys/types.h> int main(int argc, char *argv[])
{
if ( != argc)
{
fprintf(stderr,"Usage : %s directory...\n",argv[]);
exit(-);
} DIR* dp = NULL;
struct dirent *dptr = NULL;
if (NULL == (dp = opendir(argv[])))
{
fprintf(stderr,"Can not open Input Directory [%s]\n",argv[]);
exit(-);
}
else
{
printf("Directory [%s] Content List: \n",argv[]);
while(NULL != (dptr = readdir(dp)))
{
printf("inode-number : %-10ld \t filname : %s\n",dptr->d_ino,dptr->d_name);
} closedir(dp);
} return ;
}

运行结果:

在上述例子中,我们获取了一个目录所包含的所有文件的“inode-number+filename”列表。其中,有两个*特殊的文件名 *“.” 和 “..”:

“.”代表当前目录自身;

".."代表包含当前目录的上一级目录。

通过这两个特殊的文件名,我们也可以使用我们在 2.3 节中编写的 filestat 程序去获取相应的 inode-number。另外,如果“.” 和 “..”的 inode-number 是一样的时候,说明该目录已经是根目录。

最新文章

  1. 使用wex5得到的一些教训
  2. 找规律 Codeforces Round #290 (Div. 2) A. Fox And Snake
  3. jQuery演示10种不同的切换图片列表动画效果以及tab动画演示 2
  4. Jump Game | &amp; ||
  5. codeforces 483C.Diverse Permutation 解题报告
  6. Objective-C:Foundation框架-常用类-NSDictionary
  7. postgresql安装配置
  8. 24个有用的PHP类库分享
  9. My97DatePicker 与 某个CSS冲突 ,导致无法显示
  10. org.springframework.beans.factory.BeanCreationException
  11. 50% 的财富 500 强企业使用 Windows Azure
  12. Codeforces Round #271 (Div. 2) E题 Pillars(线段树维护DP)
  13. 使用Putty连接Amazon EC2 Instance
  14. [LeetCode] Image Smoother 图片平滑器
  15. java面试题总结
  16. ConchAPI | 更智能的API监控,提升团队效率
  17. VUE中/deep/深度作用域
  18. windows下nginx的安装及使用(转载)
  19. The superclass &quot;javax.servlet.http.HttpServlet&quot; was not found on the Java Build
  20. 【python】bytes与字符串的相互转化

热门文章

  1. 2019 小红书java面试笔试题 (含面试题解析)
  2. SpringBoot构建RESTful API
  3. logback配置和使用
  4. VIM编辑器使用的小技巧
  5. linux安装php nginx mysql
  6. AQS原理
  7. Redux 中间件和异步操作
  8. 【案例】如何让阀门制造提高排产效率?APS系统帮你实现
  9. C# 去除Split()中去除内容为空的数据
  10. Java httpclent请求httpclentUtils工具类