Unix - 文件中构成一个空洞的分析

时间:2022-03-13 05:28:02

lseek函数显示地为一个打开文件设置偏移量,文件偏移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将加长该文件,并在文件中构成一个空洞,这一点是允许的。位于文件中但没有写过的字节都被读为0。

eg:

Unix - 文件中构成一个空洞的分析

holeFile.c函数创建了一个具有空洞的文件,运行观察:

Unix - 文件中构成一个空洞的分析

可以看到,文件中的30个未写入字节都被设置读为0。每一行开始的一个7位数是以八进制形式表示的字节偏移量。

将刚创建的文件与同样长度但舞空洞的文件进行比较

Unix - 文件中构成一个空洞的分析

Unix - 文件中构成一个空洞的分析

虽然两个文件的长度相同,但无空洞文件占用了20个磁盘块,而具有空洞的文件只占用了8个磁盘块。