在 CentOS 系统中,readdir 函数用于读取目录中的条目。该函数定义在 <dirent.h> 头文件中。readdir 函数通常与 opendir 和 closedir 函数一起使用,以打开目录、读取目录内容并关闭目录。
readdir 函数的原型如下:
struct dirent *readdir(DIR *dirp);
readdir 函数接受一个指向 DIR 结构的指针作为参数,该结构表示已打开的目录流。函数返回一个指向 dirent 结构的指针,该结构包含有关目录中的一个条目的信息。如果到达目录的末尾或发生错误,readdir 函数将返回 NULL。
dirent 结构的定义如下:
struct dirent {
    ino_t          d_ino;       /* Inode number */
    off_t          d_off;       /* Not used by all filesystems; offset to the next dirent */
    unsigned short d_reclen;     /* Length of this dirent */
    unsigned char  d_type;      /* Type of file; see below */
    char           d_name[];    /* Null-terminated filename */
};
readdir 函数返回的 dirent 结构包含以下信息:
d_ino:目录条目的 inode 号。d_off:目录条目在目录文件中的偏移量。这个字段不是所有文件系统都使用。d_reclen:dirent 结构的长度。d_type:文件类型。可能的值包括:
DT_REG:常规文件DT_DIR:目录DT_LNK:符号链接DT_BLK:块设备文件DT_CHR:字符设备文件DT_FIFO:命名管道(FIFO)DT_SOCK:套接字DT_UNKNOWN:未知类型d_name:目录条目的名称。这是一个以 null 结尾的字符串。请注意,readdir 函数返回的 dirent 结构中的 d_name 字段是一个可变长度的数组,其大小取决于目录条目的名称。因此,在处理 d_name 字段时,需要确保分配足够的内存来存储目录条目的名称。