Linux
系统中,对某个目录具有存取许可权的任一用户都可读该目录,但是只有内核才能写目录(防止文件系统发生混乱)。在文件属主中讲过,一个目录的写许可权和执行许可权确定了在该目录中能否创建新文件以及删除文件。
opendir()
函数和 readdir()
函数可以完成对目录的操作,实现对目录的读取。
#include <sys/types.h> #include <dirent.h> DIR *opendir(const char *name);点击复制复制失败已复制
读目录之前,首先应该选择打开一个目录。 opendir()
函数用于打开一个目录,参数 name
表示目录的名字,函数执行调用,返回一个指向 DIR
结构的指针,也可以把 DIR*
称为目录流指针,类似于打开文件的 FILE*
。 DIR
的本质是一个结构体,在 <dirent.h>
中定义如下:
typedef struct __dirstream DIR;点击复制复制失败已复制
得到指向 DIR
结构体的指针之后,都可以使用 readdir()
函数对目录进行读取。
#include <dirent.h> struct dirent *readdir(DIR *dirp);点击复制复制失败已复制
readdir()
函数实现对目录的读取,其参数的类型就是 DIR*
。由此可知,选择读取一个目录,首先应该得到一个与该目录有关联的结构体指针 DIR*
。函数返回一个结构体 dirent
指针。结构体 dirent
定义如下:
struct dirent { ino_t d_ino; // inode number off_t doff; // offset to the next dirent unsigned short d_reclen; // length of this record unsigned short d_type; // type of file; not supported by all file system types char d_name[256]; // filename }点击复制复制失败已复制
其中, d_ino
表示文件的索引号, d_off
表示在目录中文件的偏移, d_reclen
表示文件名的长度, d_type
表示文件的类型, d_name
表示文件名。因此,可以通过 readdir()
函数返回的 dirnet
结构体指针访问 dirent
结构体成员,得到文件的信息。