Linux下DIR,dirent,stat 結構體

2021-07-11 01:46:22 字數 1203 閱讀 7617

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);

int closedir(dir *dp);

long telldir(dir *dp);

void seekdir(dir *dp,long loc);

接著是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下Redis下安裝

redis安裝 檢查是否安裝redis ps ef grep redis2.檢查gcc服務是否安裝成功 rpm qa grep gcc注 安裝成功則顯示 mkdir redis5.解壓redis安裝包 tar zxvf redis 2.8.17 tar.gz c usr local redis 解壓...

Linux下程式設計

windows下我的環境為 windows10 vs2015 opencv3.4.0 opencv3.4.0 contrib python linux下我的環境為 ubuntu16004 也有ubuntu1804 opencv3.4.0 opencv3.4.0 contrib python gnu ...

linux下萬用字元

萬用字元是一類鍵盤字元,有星號 和問號 當查詢檔案呀資料夾時,可以使用它來代替乙個或多個真正字元 當不知道真正字元或者不想建入完整名字時,常常使用萬用字元代替乙個或多個真正字元。星號 可以使用星號代替0個或多個字元。如果正在查詢以aew開頭的乙個檔案,但不記得檔名其餘部分,可以輸入aew,查詢以ae...