介紹
在UNIX檔案操作中,檔案位移量可以大於檔案的當前長度,在這種情況下,對該檔案的下一次寫將延長該檔案,並在檔案中構成一個空洞,這一點是允許的。位於檔案中但沒有寫過的位元組都被設為 0。
如果 offset 比檔案的當前長度更大,下一個寫操作就會把檔案“撐大(extend)”。這就是所謂的在檔案里創造“空洞(hole)”。沒有被實際寫入檔案的所有位元組由重複的 0 表示。空洞是否占用硬盤空間是由檔案系統(file system)決定的。
特點
用ls查看的檔案大小是將空洞算在內的。
cp命令拷貝的檔案,空洞部分不拷貝,所以生成的同樣檔案占用磁碟空間小
用read讀取空洞部分讀出的數據是0,所以如果用read和write拷貝一個有空洞的檔案,那么最終得到的檔案沒有了空洞,空洞部分都被0給填充了,檔案占用的磁碟空間就大了。不過檔案大小不變。