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


工作中遇到奇怪的事,加載增量的時候加載不上。於是開始分析原因,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()類似, 接下來對目錄的讀取和搜索都要使用此返回值.




免責聲明!

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



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