工作中遇到奇怪的事,加載增量的時候加載不上。於是開始分析原因,log里邊沒有任何錯誤信息,只有加載完成的標志。增量的數據在目錄里邊是存在的,但是顯示的目錄大小卻不是4096,而是17,不知道為什么。后來gdb調試,發現沒有取到對應的增量的文件夾目錄。而這是用一個函數GetChildDir()來實現的。這個函數里邊調用了c的函數:opendir函數和readdir函數。於是開始研究這兩個函數。
==================================
1. 發現 linux 大部分的目錄 都是4096(linux).
一般情況下,HDD磁盤最小的管理單位是扇區(Sector,也叫Unit或者Block),扇區的大小是512Bytes,但Linux一次I/O是8個扇區即4096Bytes,因此Linux(准確的說是ext2/ext3等文件系統)存取文件的最小單位即使4096Bytes(=8個Blocks)(Windows的NTFS好像是1K即2個Blocks)。而
目錄 是特殊文件,OS初始分配8個Blocks,且size也即是4096Bytes,這與普通文件(Regular file)不同,普通文件的size是給予文件內容計算的,但是實際占用的磁盤空間總是是4096的倍數。
在linux的shell解釋器中,輸入這樣的命令stat + 文件名即可獲取文件的屬性.
2. opendir函數
頭文件:#include <sys/types.h> #include <dirent.h>
函數:DIR *opendir(const char *name); [關於DIR介紹:http://blog.csdn.net/u012349696/article/details/50083787]
含義: opendir()用來打開參數name 指定的目錄, 並返回DIR*形態的目錄流, 和open()類似, 接下來對目錄的讀取和搜索都要使用此返回值.
