Unix 环境高级编程——列出一个目录中的所有文件

“目录(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/Linux,unix,c,编程)