今天看《TLPI》,看到了文件空洞這個名詞,工做了三四年第一次聽到這個詞。linux
那文件空洞究竟是什麼?在哪些場景會用到呢?編程
文件空洞的是什麼?:spa
linux下讀文件的時候,若是lseek指定的讀偏移量超過了文件結尾,此時read調用返回的是0,標識文件結尾。可是對於write調用,卻能夠繼續寫入數據。指針
從文件結尾後到新寫入的數據間這段空間稱爲文件空洞。進程
文件空洞有什麼特色?it
1.文件空洞並不佔據磁盤空間,直到後續真正寫入了數據纔會落到磁盤。在此以前,空洞區對應鏈表指向的是空指針,文件系統將其解釋爲0的子串。(因此在創建文件空洞的時候,速度會很是快。沒磁盤IO)class
2.文件系統會扣減程序可用磁盤空間數值大小,作到預留pdf
文件空洞在哪一個場景可能用到?(下面是個人理解,不必定正確,歡迎指正)書籍
想象一個下載數據的場景,你須要下載10G的電影,那你的磁盤如今有11G剩餘,你的網速沒那麼快,可能須要下載1個小時,在這1個小時內磁盤可能會被其餘程序佔用。下載
因此呢,你能夠利用文件空洞作好預留。創建一個10G的文件空洞,雖然文件系統沒有真正落盤,可是可用磁盤空間會被真正扣減,也就是能夠作到預留。
因此即便你後續下載再慢,文件空洞機制也幫你保證了,你這個電影不會由於磁盤不夠而中斷。
若是沒有文件空洞,想象,你的電影下到5G,磁盤被另外一個進程佔用了剩餘的6G,下載被迫中斷。
上面的內容出自上篇提到的《UNIX系統編程》,英文簡稱《TLPI》
我把《UNIX系統編程》電子版書籍放到了個人公衆號,若是須要能夠掃碼關注個人公衆號&回覆 "TLPI",便可下載 《UNIX系統編程》《The Linux Programming Interface》的pdf版本