“目录(directory)是一个包含目录项的文件。在逻辑上,可以认为每个目录项都包含一个文件名,同时还包含说明该文件属性的信息。文件属性是指文件类型(是普通文件还是目录等)、文件大小、文件所有者、文件权限(其他用户能否访问该文件)以及文件最后的修改时间等。”这段话摘抄自《Unix环境高级编程》(第三版)第3页。
我的理解是:目录也是一个文件,这个文件包含了若干目录项,每个目录项的结构包含若干个字段,如文件名,文件大小等。每个目录至少包含2个目录项,一个目录项的文件名是“.”(点)另一个目录项的文件名是“..”(点点)。
下面介绍一下列出一个目录中的所有文件涉及到的几个函数:
opendir()——既然目录也是一个文件,要读取目录,首先需要打开目录,用到的是opendir函数,该函数用一个目录名称作为参数,返回一个指向该目录的指针。
DIR *dp;
dp = opendir("/etc");
readdir()——目录已经打开,那么开始读取目录中的目录项了,每次调用readdir函数就会读取一条目录项,依次往下读,若读到最后则返回NULL。该函数以一个指向目录的指针为参数,返回一个指向dirent结构的指针,这个dirent结构体封装了目录项的一些属性。
struct dirent *dirp;
while((dirp = readdir(dp)) != NULL)
{
printf("%s\n", dirp->d_name);
}
可以看出dirent结构体有一个字段d_name用来存储目录项的名字。
closedir()——最后要记得用该函数来关闭打开的目录,参数是那个指向目录的指针dp.
closedir(dp);
Unix 环境高级编程——列出一个目录中的所有文件
最新推荐文章于 2022-08-17 13:40:02 发布