Stat
為什麼 st_blocks 總是以 512 字節的塊報告?
我正在調試一個 fuse 文件系統,它報告了錯誤的
du
. 原來它是把st_size / st_blksize
$$ * $$進入結構
st_blocks
。stat
Linux手冊頁stat(2)
說:struct stat { … off_t st_size; /* total size, in bytes */ blksize_t st_blksize; /* blocksize for file system I/O */ blkcnt_t st_blocks; /* number of 512B blocks allocated */ … };
st_blksize
無論如何,如果在 512B 塊中是什麼意思st_blocks
?$$ * $$無論如何,這看起來是錯誤的,因為整數除法不考慮小數部分……
st_blocks
定義為_為此對象分配的塊數。
塊的大小是特定於實現的。由於歷史原因,在 Linux 上它總是 512 字節;特別是,它曾經是磁碟扇區的典型大小。
st_blksize
不相關;它是此對象的特定於文件系統的首選 I/O 塊大小。在某些文件系統類型中,這可能因文件而異。
它表示 I/O 的首選大小,即在一次操作中應傳輸的數據量以獲得最佳結果(忽略 I/O 堆棧中的其他層)。