目录
1、打开/访问目录 (opendir / fdopendir)
opendir / fdopendir 函数的作用是访问指定路径的目录,函数声明如下:
opendir 函数是通过用户提供的目录路径来访问目录,参数是目录路径,返回值是目录指针 DIR*,是一个目录结构体,存放了目录的相关信息,类似于之前文件操作里的 FILE*,用户可以通过这个目录指针来访问目录。
和 opendir 函数的作用一样,不一样的地方在于,fdopendir 函数的参数是文件描述符(需搭配open函数来使用),Linux下一切皆文件,目录也可以看作是一个文件,也可以使用open函数来获取其对应的文件描述符。
readdir 函数的作用是读取目录流中的内容。函数声明如下:
参数:opendir / fdopendir 返回的目录指针
返回值:失败返回NULL,成功返回一个包含目录信息的结构体,关于该结构体的定义如下,需要重点关注的是 最后一个结构体成员 d_name
注意:和文件指针一样,每调用一次 readdir, 目录指针 DIR 就会指向当前目录中的下一个目录或者普通文件,当到达目录尾会返回NULL。
closedir 的作用是关闭一个打开的目录,参数就是打开目录文件时返回的目录指针。成功返回 0,失败返回 -1。
遍历目录的步骤主要有两步:
- #include
- #include
- #include
-
- int main(int argc, char** argv)
- {
- DIR* dir = opendir("/home/linux/Templates"); // 打开一个目录
- if (dir == NULL)
- {
- perror("opendir");
- return -1;
- }
-
- struct dirent* dnt;
- while((dnt = readdir(dir))!=NULL) // 只要返回结果不为NULL,就一直遍历
- {
- // 滤除 . 和 ..
- if (!strcmp(".", dnt->d_name) || !strcmp("..", dnt->d_name))
- {
- continue;
- }
- printf("%s\n",dnt->d_name);
- }
-
- closedir(dir);
- return 0;
- }