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 }
posted @ 2016-11-02 19:23  GreenHand#  阅读(1499)  评论(0编辑  收藏  举报