1. 程式人生 > >opendir函數和readdir函數內涵及用法

opendir函數和readdir函數內涵及用法

一次 用法 指定 include tails types.h 接下來 大小 details

工作中遇到奇怪的事,加載增量的時候加載不上。於是開始分析原因,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的倍數。

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()類似, 接下來對目錄的讀取和搜索都要使用此返回值.



opendir函數和readdir函數內涵及用法