日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux文件属性4——读取目录文件

發布時間:2023/12/20 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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——读取目录文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。