标签:
遍历目录结构查找文件是很常用的功能,今天介绍一下使用Linux C 遍历Linux目录结构的方法:
linux提供几个系统调用,以便于直接目录的读取和操作:
DIR * opendir(const char * pathname);
struct dirent * readdir(DIR * dir_handle);
int closedir(DIR * dir);
int stat(const char *file_name, struct stat *buf);
#include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <errno.h> #include <dirent.h> //包含目录操作的相关函数
/**
* @Param pathname 要遍历的目录全路径名称
* @Param depth 当前的遍历等级,初始为0
*/
void printdir(const char * pathname, const int depth) { DIR * dir; struct dirent * de; struct stat fs; int i = 0; if((dir = opendir(pathname)) == NULL) { printf("open dir %s error \r\n", pathname); return; } chdir(pathname); while((de = readdir(dir)) != NULL) { if(strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0){continue;} if(stat(de->d_name, &fs) == -1){perror("fstat error");continue;} if(S_ISDIR(fs.st_mode)) {
/**
* 如果当前路径是目录,就递归调用printdir函数
*/ for(i=0;i<depth;++i){printf(" ");} printf("%s\r\n", de->d_name); printdir(de->d_name, depth + 4); } else { for(i=0;i<depth;++i) { printf(" "); } printf("%s\r\n", de->d_name); } }
chdir(".."); closedir(dir); return; } int main(int argc, char ** argv) { printdir("/root/projects", 0); return 0; }
Linux 自带的目录遍历函数
int scandir(const char *dir,struct dirent **namelist,int (*filter)(const void *b),
int ( * compare )( const struct dirent **, const struct dirent ** ) );
int alphasort(const void *a, const void *b);
int versionsort(const void *a, const void *b);
具体函数使用方法见man
标签:
原文地址:http://www.cnblogs.com/Wali8822/p/4890348.html