opendir()
函数原型:DIR *opendir(const char *path)
打开一个目录,失败返回NULL
DIR结构体原型为:struct_dirstream
在linux系统中:
typedef struct _dirstream DIR;
struct _dirstream
{
void* _fd; //描述符的指针。
char* _data; //目录块。
int_entry_data; //数据对应。
char *__ptr; //当前指针
int __entry_ptr; //对应ptr
size_t __allocation; //分配的空间
size_t __size; //有效数据总数
__libc_lock_define (, __lock); //结构的互斥锁
};
*/
/*
readdir()
函数原型:struct dirent* readdir(DIR *dir_handle);
本函数读取dir_handle目录下的目录项,如果有未读取的目录项,返回,否则返回NULL
循环读取dir_handle目录和文件都读
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <errno.h>
#include <string.h>
//搜索指定目录下的所有文件及其子目录下的文件
void getFileName(char *dirPath)
{
DIR *dir=opendir(dirPath);
if(dir==NULL)
{
printf("%d\n",strerror(errno));
return;
}
chdir(dirPath); //进入到当前读取目录
struct dirent *ent;
while ((ent=readdir(dir))!=NULL)
{
if(strcmp(ent->d_name,".")==0||strcmp(ent->d_name,"..")==0)
{
continue;
}
struct stat st;
stat(ent->d_name,&st);
if(S_ISDIR(st.st_mode))
{
getFileName(ent->d_name);
}
else
{
printf("%s\n",ent->d_name);
}
}
closedir(dir);
chdir(".."); //返回当前目录的上一级目录
}
int main(int argc,char *argv[])
{
getFileName("/");
return 0;
}