APUE Chapter 4 Files and Directories(2)—File systems

     看一下UFS的构成。

     1、每一个disk drive都可以分成好多小的partitions,每个partition都可以使用一种file system。在Unix世界中有各种各样的File system可供使用:UFS,PCFS,HSFS等等。这里介绍UFS。

     看下图:

disk drive partitions and file system

     书上没有详细介绍各个细节,只是介绍了i-node。在这个file system中,i-node里存放了有关文件的几乎全部的信息:file type, access permission bits, file size, pointers to the file’s block, and so on.

     只有两个信息没有在i-node中存储:i-node number和filename。

     2、具体看一下i-nodes和data blocks中的信息:

cylinder group

     根据这些信息,可以定义几个links:

        · hard links:对于每一个i-node,有多少directory entry指向它,它自己是知道的,这个值储存在st_nlinks中(对应的数据类型为nlink_t,在系统中有LINK_MAX表示最大hard links的个数)。只有当hard links减为0的时候,它所对应的data blocks才会释放。

        · symbolic links:对于一个i-node,如果它的file type为S_IFLNK(symbolic link),那么它所指向的data block就是一个名字,表示它所指向的那个文件。比如一个directory entry中的filename为lib,它指向一个i-node,这个i-node是一个link file,它指向的data block中写着/usr/lib,那么它指向的文件就是/usr/lib这个文件。

     3、再看一下在一个目录中新建一个目录会产生什么情况:

image

     当前目录是右边的这个directory block,在它之下新建一个testdir目录。

     先看右边,第一个entry表明它的filename是dot,它的i-node number是1267,那么它就代表一个i-node,这个i-node的file type是directory。它新建一个目录,filename是testdir,i-node number是2549,它指向一个新的i-node,这个i-node 的file type也是directory。这个i-node指向一个directory block,这个block中存放着有关2549这个目录的信息。

     leaf directory  <==>  st_nlink=2

     other directory  <==> st_nlink>=3

     4、文件的重命名。

     这个很简单,只是在directory block中新建一个entry,它指向同一个i-node,只不过把filename变一下。然后再把原来的directory entry删除。

     操作完成后,i-node中的st_nlink的值没有发生改变。

原文地址:https://www.cnblogs.com/wangshuo/p/2033902.html