linux学习笔记-读《Linux编程技术详解》(4-1)-文件和目录

 

 

 

Windows是按照设备标识符来划分目录的,Linux将具体的设备挂载到一个独立的树形层次结构中。对同一个目录挂载不同的分区后,挂载的文件目录将覆盖原有的内容。

 

Linux的虚拟文件系统简称VFS,是Virtual Filesystem的缩写。在Linux使用ext文件系统之前,真实的文件系统是和内核整合在一起的。后来为支持多种不同文件系统,Linux采用了在UNIX操作系统中广泛采用的设计思想,通过VFS来屏蔽底层文件系统的实现细节和差异。VFS最早由Sun公司提出,其目的是实现网络文件系统(NFS)。

 

VFS基本思想是将各种文件系统的公共部分抽取出来,形成一个抽象层。对用户程序而言,VFS提供了文件系统的系统调用接口。而对具体的文件分区格式而言,VFS通过一系列统一的外部调用接口来屏蔽实现细节,使得文件系统的调用不用关心底层的存储介质和文件系统类型。

 linux学习笔记-读《Linux编程技术详解》(4-1)-文件和目录_第1张图片

VFS屏蔽不同分区格式间读写差异示意图

 

Linux系统初始化时,首先会在内存中初始化VFS目录树。需要注意的是,VFS目录树不等同于人们观念中的文件系统目录树。VFS目录树的主要用途是给实际的文件系统提供挂载点。也就是说,使用mount命令将某个设备挂载到某个目录下,实际上是挂载到了内存中的VFS目录树上。

 

当需要创建目录树时,首先会对VFS进行查询,以获得建立目录的上级目录的信息。例如,要建立/media/fat32目录,首先会找到根目录,然后到media目录。如果查询过程中发现用户没有权限在/media目录下建立目录,会调用相关处理过程。如果不存在权限问题,VFS将调用相关处理建立目录。

 

当用户在/media/fat32目录下挂载某个分区时,VFS要将对VFS目录树的操作转化为挂载到这个目录的具体文件系统的操作。例如,使用 ”ls -l /media/fat32” 查看刚挂载到/media/fat32目录下的 /dev/hda3 目录的内容时,VFS文件系统要将对VFS目录树的操作转化为对挂载在该目录的fat32文件系统的操作。

 

getcwd函数获得当前工作目录,将工作目录保存在调用者提供的字符串中,字符串的大小是由用户分配。对进程而言,每个进程都有一个当前工作目录的概念。

pathconf函数可以动态获得当前系统的目录最大长度。PATH_MAXPOSIX标准中可选的一个常量。也就是说该变量可能在limits.h中有定义,也可能没有。它表示目录的最大长度,和使用pathconf函数获得的结果是完全相同的。

 

error: #include <errno.h>,里面会有extern int errno;的声明。
通常用法是,系统调用或库函数成功返回0,失败返回-1,而失败原因在errno里。
要想输出对应的错误信息,可以用perror(),如perror(“abc”);

 

 

你可能感兴趣的:(linux学习笔记-读《Linux编程技术详解》(4-1)-文件和目录)