1、目录访问相关函数:
DIR* opendir (const char * path );
struct dirent* readdir(DIR *dirptr) ;参数是一个指向dirent 结构的指针。DIR是目录指针,读取一个目录,读取完毕返回一个空指针。
int closedir(DIR *dirptr);
2、目录信息结构体如下所示:
struct dirent
{
long d_ino; //inode number i结点号码
off_t d_off; //偏移(当前文件在目录中的偏移位置)
unsigned short d_reclen; //文件名称的长度
char d_name[NAME_MAX+1]; //filename 文件名称
}
示例:实现一个小型ls简单程序:
1 #include <sys/types.h> 2 #include <sys/stat.h> 3 #include <fcntl.h> 4 #include<errno.h> 5 #include<unistd.h> 6 #include<stdio.h> 7 #include<stdlib.h> 8 #include<string.h> 9 #include<dirent.h> 10 //#define ERR_EXIT(m) (perror(m),exit(EXIT_FAILURE)) 11 #define ERR_EXIT(m) 12 do 13 { 14 perror(m); 15 exit(EXIT_FAILURE); 16 }while(0) //宏要求一条语句 17 int main(void) 18 { 19 DIR *dir; 20 //opendir()打开一个路径 21 if((dir=opendir("."))==NULL)//打开当前目录 22 ERR_EXIT("opendir error"); 23 struct dirent *de; 24 while((de=readdir(dir))!=NULL) 25 { 26 if(strncmp(de->d_name,".",1)==0) //隐藏文件.和.. 第一个字符是点号隐藏 27 continue; 28 printf("%s ",de->d_name); 29 } 30 closedir(dir); 31 exit(EXIT_SUCCESS); 32 return 0; 33 }