Linux操作系統中文件結構stat中st_size的說明以及對於文件中洞(Holes)的理解


文件stat結構體中st_size成員

  對於所有的文件類型,st_size成員對其中的普通文件、目錄以及符號鏈接有實在的意義。其中,對於普通文件而言,st_size記錄了該文件的實際大小;對於目錄而言,st_size的值為16或者512的倍數;對於符號鏈接而言,st_size的值為符號鏈接所指的路徑的長度。例如lib->usr/lib,則st_size的值即為7。

  在某些Unix系統中,st_size的值對pipe等文件也有意義,表示當前pipe中可以讀取的字節數。

Holes產生的原因

  當我們使用lseek函數,在超出文件的原文件尾的某個位置處開始寫入字節時,為了節省磁盤空間,它們之間未被寫入數據的空間並未被文件系統完全分配。這個時候,就會造成文件的大小,與文件所占用的磁盤空間產生大小不一致的情況。我們使用ls -l命令可以看到文件的大小。而使用du -s查看文件的磁盤占用時,就會發現他們存在着不一致的情況,有興趣的讀者可以自己在Linux下面進行試驗。

  如果我們在hole中的某個位置使用read函數進行讀操作時,函數會返回0。

  需要注意的一點是,當我們使用cat指令復制帶有hole的文件時,復制得到的文件中,這些hole會被0所填充,使文件的磁盤占用空間與其實際大小相匹配。


作者:Chenny Chen 
出處:http://www.cnblogs.com/XjChenny/ 
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

 轉載:http://www.cnblogs.com/XjChenny/archive/2012/12/10/2811995.html 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM