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