dir結構體的定義:
struct
__dirstream
;
typedef
struct
__dirstream dir;
dir結構體類似於file,是乙個內部結構,以下幾個函式用這個內部結構儲存當前正在被讀取的目錄的有關資訊(摘自《unix環境高階程式設計(第二版)》)。函式 dir *opendir(const char *pathname),即開啟檔案目錄,返回的就是指向dir結構體的指標,而該指標由以下幾個函式使用:
struct
dirent *readdir(dir *dp);
void
rewinddir(dir *dp);
intclosedir(dir *dp);
long
telldir(dir *dp);
void
seekdir(dir *dp,
long
loc);
關於dir結構,我們知道這麼多就可以了,沒必要去再去研究他的結構成員。
接著是dirent結構體,首先我們要弄清楚目錄檔案(directory file)的概念:這種檔案包含了其他檔案的名字以及指向與這些檔案有關的資訊的指標(摘自《unix環境高階程式設計(第二版)》)。從定義能夠看出,dirent不僅僅指向目錄,還指向目錄中的具體檔案,readdir函式同樣也讀取目錄下的檔案,這就是證據。以下為dirent結構體的定義:
struct
dirent
從上述定義也能夠看出來,dirent結構體儲存的關於檔案的資訊很少,所以dirent同樣也是起著乙個索引的作用,如果想獲得類似ls -l那種效果的檔案資訊,必須要靠stat函式了。
通過readdir函式讀取到的檔名儲存在結構體dirent的d_name成員中,而函式
int stat(const char *file_name, struct stat *buf);
的作用就是獲取檔名為d_name的檔案的詳細資訊,儲存在stat結構體中。以下為stat結構體的定義:
struct
stat ;
這個記錄的資訊就很詳細了吧,呵呵。
最後,總結一下,想要獲取某目錄下(比如a目下)b檔案的詳細資訊,我們應該怎樣做?
首先,我們使用opendir函式開啟目錄a,返回指向目錄a的dir結構體c。
接著,我們呼叫readdir( c)函式讀取目錄a下所有檔案(包括目錄),返回指向目錄a下所有檔案的dirent結構體d。
然後,我們遍歷d,呼叫stat(d->name,stat *e)來獲取每個檔案的詳細資訊,儲存在stat結構體e中。
總體就是這樣一種逐步細化的過程,在這一過程中,三種結構體扮演著不同的角色。
Linux 系統程式設計學習 檔案I O操作
一 非緩衝檔案操作 執行非緩衝檔案操作後,應用程式將立即獲取或傳送資料,非緩衝檔案操作的函式只有 read write 從檔案中將資訊講到到指定的記憶體區域中read 檔案識別符號,記憶體塊指標,記憶體塊長度 返回值是實際讀取的長度,沒有讀取到資料返回0,錯誤返回1 檔案識別符號可使用open 函式...
Linux系統程式設計 檔案IO操作
檔案描述符 在 linux 的世界裡,一切裝置皆檔案。我們可以系統呼叫中 i o 的函式 i input,輸入 o output,輸出 對檔案進行相應的操作 open close write read 等 開啟現存盤案或新建檔案時,系統 核心 會返回乙個檔案描述符,檔案描述符用來指定已開啟的檔案。這...
linux學習 檔案 系統 編輯器
可分享的 不可分享的 不可變的 user 軟體 etc 配置檔案 opt 第三方協力軟體 boot 開機檔案 可變動的 var mail 使用者郵件 var run 程式相關 var spool.news 新聞組 var lock 程式相關 命令說明 stat whohostname 顯示主機名稱 ...