APUE Chapter 4 Files and Directories(2)—File systems
Posted on 2011-05-01 15:20 天地玄黄 阅读(230) 评论(0) 编辑 收藏 举报看一下UFS的构成。
1、每一个disk drive都可以分成好多小的partitions,每个partition都可以使用一种file system。在Unix世界中有各种各样的File system可供使用:UFS,PCFS,HSFS等等。这里介绍UFS。
看下图:
书上没有详细介绍各个细节,只是介绍了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中的信息:
根据这些信息,可以定义几个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、再看一下在一个目录中新建一个目录会产生什么情况:
当前目录是右边的这个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的值没有发生改变。