Linux目錄遍歷opendir()


頭文件:#include<dirent.h>

DIR *opendir(const char *dirname); 打開目錄

struct dirent *readdir(DIR *dirp);讀取目錄

int closedir(DIR *dirp);關閉目錄

 

1、opendir(const char *dirname)

  •         作用:打開目錄
  •         參數:*dirname :目錄名--字符數組或者字符串常量

                    比如 . :當前目錄

                            

 

 

                           tmp:子目錄名    也可寫成./tmp

  •        返回值:返回指向目錄dirname的DIR結構體的指針

       DIR結構體定義:

struct __dirstream  

{  

    void *__fd;   

    char *__data;   

    int __entry_data;   

    char *__ptr;   

    int __entry_ptr;   

    size_t __allocation;   

    size_t __size;   

    __libc_lock_define (, __lock)   

};  

   使用

 

DIR *dir_p;
        if ((dir_p = opendir(dirname)) == NULL)
 {
  printf("dir ERROR\n");
 }
 else
{   }

  

2、 struct dirent *readdir(DIR *dirp)

  •        作用:讀取目錄
  •        參數:*dirp 使用opendir后返回的DIR結構體的指針
  •       返回:指向目錄“dirname”的結構體指針dirent*

                 dirent結構體定義:

struct dirent

{

long d_ino;         //該文件的索引節點號            

off_t d_off;        //文件在目錄中的偏移           

unsigned short d_reclen;       //文件長度

char d_name [NAME_MAX+1];      //文件名稱

}

  •       使用:
struct dirent *direntp;
                  while ((direntp = readdir(dir_p)) != NULL)

 

      讀取目錄后,我們就要對文件進行處理,獲取文件的具體信息stat(const char *file_name, struct stat *buf),此時可以用到頭文件

               #include <sys/stat.h>  這個我將在另一個隨筆中細講.

3、int closedir(DIR *dirp);

  •    作用:關閉目錄

4、總結

     如果想要獲取a目錄下b文件的具體信息

首先使用opendir(a),獲得指向目錄a的DIR結構體的指針dirp,再使用readdir(dirp),返回指向目錄a下所有文件的dirent結構體的指針direntp,

每次循環,direntp指向下一個文件,通過判斷direntp->d_name是否==b,則可找到b文件,再通過stat(direntp->d_name,&st)[struct stat st;],將b文件的具體信息存儲在stat結構體st中。

最后關閉a目錄即可。

 

 

  

      

 

                             


免責聲明!

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



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