LINUX下历遍目录的方法一般是这样的打开目录-》读取-》关闭目录相关函数是opendir -> readdir -> closedir#include <dirent.h >DIR *opendir(const char *dirname );#include <dirent.h >struct dirent *readdir(DIR *dirp );#include <dirent.h>int closedir(DIR *dirp );好了,三个函数都出来了呵呵,原型就是上面,给自己解释一下免得以后我自己忘了呵呵!我以经忘过好几回了,所以这次放上博客来opendir用于打开目录,是类似于流的那种方式,返回一个指向DIR结构体的指针他的参数*dirname是一个字符数组或者字符串常量,readdir函数用于读取目录,他只有一个参数,这个参数主opendir返回的结构体指针,或者叫句柄更容易理解些吧。这个函数也返回一个结构体指针 dirent *dirent的结构如下定义struct dirent{ long d_ino; off_t d_off; unsigned short d_reclen; char d_name [NAME_MAX+1]; }结构体中d_ino存放的是该文件的结点数目,什么是结点数目呢我也说不清楚了呵呵,查一下其它资料了(这里应该不是节点数目,而是其下文件的索引节点号inode)d_off 是文件在目录中的编移,具体是什么意思我也不是很明白,我很少用到它,其本上就是用到d_name ,short d_reclen是这个文件的长度,需要注意的是这里的长度并不是指文件大小,因为大小和长度是2回事了,你可以用lseek将文件长度移得很长,但大小其实还是那么大.最后一个元素就是我们要的了,文件名称!写了一个实例:#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h>#include <dirent.h>
void print_usage(void);
void print_usage(void){ printf("Usage: test dirname\n");}
int main(int argc,char *argv[]){ DIR * dp;struct dirent *filename;
if (argc < 2){ print_usage();exit(1);}dp = opendir(argv[1]);if (!dp){ fprintf(stderr,"open directory error\n");return 0;}while (filename=readdir(dp)){ printf("filename:%-10s\td_info:%ld\t d_reclen:%us\n",filename->d_name,filename->d_ino,filename->d_reclen);}closedir(dp);return 0;}