Linux文件属性4——读取目录文件
生活随笔
收集整理的這篇文章主要介紹了
Linux文件属性4——读取目录文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
以下內容源于朱有鵬《物聯網大講堂》課程的學習整理,如有侵權,請告知刪除。
1、opendir與readdir函數
(1)opendir打開一個目錄后,得到一個DIR類型的指針給readdir使用;
(2)readdir函數調用一次就會返回一個struct dirent類型的指針
- 這個指針指向一個結構體變量,這個結構體變量里面記錄了一個目錄項(目錄項,即目錄中的一個文件)。
(3)readdir調用一次只能讀出一個目錄項,要想讀出目錄中所有的目錄項必須多次調用readdir函數。
- readdir函數內部戶記住哪個目錄項已經被讀過,哪個還沒讀,所以多次調用后不會重復返回已經返回過的目錄項。
- 當readdir函數返回NULL時就表示目錄中所有的目錄項已經讀完了。
2、dirent結構體
3、讀取目錄實戰演練
#include <stdio.h> #include <sys/types.h> #include <dirent.h>int main(int argc, char **argv) {DIR *pDir = NULL;struct dirent * pEnt = NULL;unsigned int cnt = 0;if (argc != 2){printf("usage: %s dirname\n", argv[0]);return -1;}pDir = opendir(argv[1]);if (NULL == pDir){perror("opendir");return -1;}while (1){pEnt = readdir(pDir);if(pEnt != NULL){// 還有子文件,在此處理子文件printf("name:[%s] ,", pEnt->d_name);cnt++;if (pEnt->d_type == DT_REG){printf("是普通文件\n");}else{printf("不是普通文件\n");}}else{break;}};printf("總文件數為:%d\n", cnt);return 0; }4、可重入函數介紹
(1)可重入函數的概念;
(2)readdir函數的特點
- readdir函數直接返回了一個結構體變量指針,因為readdir內部申請了內存并且給我們返回了地址。
- 多次調用readdir時,readir內部并不會重復申請內存,而是使用第一次調用readdir時分配的那個內存。
- 這個設計方法是readdir不可重入的關鍵。
(3)readdir在多次調用之間是有關聯的,這個關聯也說明readdir函數是不可重入的。
(4)庫函數中有一些函數,剛開始提供時,都是不可重入的;后來意識到這種方式不安全,所以重新封裝C庫,提供了對應的可重復版本
- 一般是不可重入版本函數名_r
總結
以上是生活随笔為你收集整理的Linux文件属性4——读取目录文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ISDN-PRI,1号,7号信令的基础知
- 下一篇: 小黑计算机一级题库,小黑课堂计算机一级题