oendir(),readdir(),closedir() 打开/读取/关闭目录
目录操作
当目标是目录而不是文件的时候,ls -l的结果会显示目录下所有子条目的信息,怎么去遍历整个目录呢?答案马上揭晓!
1. 打开目录
功能:opendir()用来打开参数name指定的目录,并返回DIR *形态的目录流
需要包含的头文件:<sys/types.h>,<dirent.h>
函数原型:
DIR * opendir(const char * name);
参数:
name:要打开的目录完全路径名
返回值:
成功返回目录流; 失败返回NULL
2. 读取目录
功能:readdir()返回参数dir目录流的下一个子条目(子目录或子文件)
函数原型:
struct dirent * readdir(DIR * dir);
参数:
dir:目录流
返回值:
成功返回结构体指向的指针,错误或以读完目录,返回NULL
函数执行成功返回的结构体原型如下:
1 struct dirent { 2 ino_t d_ino; 3 off_t d_off; 4 unsigned short d_reclen; 5 unsigned char d_type; 6 char d_name[256]; 7 };
其中 d_name字段,是存放子条目的名称
3. 关闭目录
功能:closedir()关闭dir所指的目录流
函数原型:
int closedir(DIR * dir);
参数:
dir:目录流
返回值:
成功返回0;失败返回-1,错误原因在errno中
综合的例子:
1 #include 2 #include 3 #include 4 int main(int argc, char *argv[]) 5 { 6 DIR *dp; 7 struct dirent *entp; 8 if (argc != 2) { 9 printf("usage: showdir dirname\n"); 10 exit(0); 11 } 12 if ((dp = opendir(argv[1])) == NULL) { 13 perror("opendir"); 14 exit(-1); 15 } 16 while ((entp = readdir(dp)) != NULL) 17 printf("%s\n", entp->d_name); 18 19 closedir(dp); 20 return 0; 21 }