Linux c —— opendir函數和readdir函數內涵及用法(轉)
opendir函數
頭文件:#include <sys/types.h> #include <dirent.h>
函數:DIR *opendir(const char *name);
含義: opendir()用來打開參數name 指定的目錄, 並返回DIR*形態的目錄流, 和open()類似, 接下來對目錄的讀取和搜索都要使用此返回值.
關於DIR : 詳細:http://blog.csdn.net/u012349696/article/details/50083787
先說說DIR這一結構體,以下為DIR結構體的定義:
1 struct __dirstream 2 {3 void *__fd; 4 char *__data; 5 int __entry_data; 6 char *__ptr; 7 int __entry_ptr; 8 size_t __allocation; 9 size_t __size; 10 __libc_lock_define (, __lock) 11 }; 12 13 typedef struct __dirstream DIR;
DIR結構體類似於FILE,是一個內部結構,以下幾個函數用這個內部結構保存當前正在被讀取的目錄的有關信息(摘自《UNIX環境高級編程(第二版)》)。函數 DIR *opendir(const char *pathname),即打開文件目錄,返回的就是指向DIR結構體的指針,而該指針由以下幾個函數使用:
1 struct dirent *readdir(DIR *dp); 2 3 void rewinddir(DIR *dp); 4 5 int closedir(DIR *dp); 6 7 long telldir(DIR *dp); 8 9 void seekdir(DIR *dp,long loc);
關於DIR結構,我們知道這麽多就可以了,沒必要去再去研究他的結構成員。
.....
readdir函數
頭文件:#include<sys/types.h> #include <dirent.h>
函數:struct dirent *readdir(DIR *dir);
含義:readdir()返回參數dir 目錄流的下個目錄進入點。
struct dirent
{
ino_t d_ino; //d_ino 此目錄進入點的inode
ff_t d_off; //d_off 目錄文件開頭至此目錄進入點的位移
signed short int d_reclen; //d_reclen _name 的長度, 不包含NULL 字符
unsigned char d_type; //d_type d_name 所指的文件類型 d_name 文件名
har d_name[256];
};
closedir函數
頭文件:#include<sys/types.h> #include <dirent.h>
函數;closedir(DIR *dir);
含義:關閉dir流 ;
示例,掃描目錄下的jpg文件:
1 std::vector<std::string> filelist; 2 DIR * dirp=opendir(imagepath); 3 struct dirent *directory; 4 if (dirp) 5 { 6 while ((directory = readdir(dirp)) != NULL) 7 { 8 if(strlen(directory->d_name)<=4) 9 continue; 10 11 char buf[5]; 12 memcpy(buf,&(directory->d_name[strlen(directory->d_name)-4]),4); 13 buf[4]=‘\0‘; 14 15 if(strcmp(buf,".jpg")==0) 16 { 17 printf("%s\n", directory->d_name); 18 filelist.push_back(directory->d_name); 19 } 20 } 21 22 closedir(dirp); 23 } 24 else 25 printf("cannot open directory %s !",imagepath);
轉自:https://blog.csdn.net/u012349696/article/details/50084195
Linux c —— opendir函數和readdir函數內涵及用法(轉)