温馨提示×

centos readdir是何函数

小樊
37
2026-09-24 09:32:16
栏目: 智能运维

在 CentOS(以及一般的 Linux 系统) 中,readdir 是一个 C 语言标准库函数,用于 读取目录中的内容。它属于 POSIX 标准,定义在 <dirent.h> 头文件中。


一、readdir 是什么?

readdir 用于 逐个读取一个已打开目录中的目录项(文件/子目录)。

它通常和以下函数配合使用:

  • opendir():打开目录
  • readdir():读取目录项
  • closedir():关闭目录

二、函数原型

#include <dirent.h>

struct dirent *readdir(DIR *dirp);

参数

  • dirp:由 opendir() 返回的目录流指针

返回值

  • 成功:指向 struct dirent 的指针
  • 失败或到达目录末尾:返回 NULL

三、struct dirent 结构(常见字段)

struct dirent {
    ino_t          d_ino;     // inode 号
    off_t          d_off;     // 偏移量
    unsigned short d_reclen;  // 记录长度
    unsigned char  d_type;    // 文件类型
    char           d_name[256]; // 文件名
};

在 CentOS / Linux 上:

  • d_name 是最常用的字段(文件名)
  • d_type 可判断是文件、目录、符号链接等

四、使用示例

#include <stdio.h>
#include <dirent.h>

int main() {
    DIR *dir = opendir("/tmp");
    if (dir == NULL) {
        perror("opendir");
        return 1;
    }

    struct dirent *entry;
    while ((entry = readdir(dir)) != NULL) {
        printf("%s\n", entry->d_name);
    }

    closedir(dir);
    return 0;
}

五、注意事项(CentOS / Linux)

  1. 会包含 . 和 ..

    • 需要自己过滤
    if (strcmp(entry->d_name, ".") == 0 ||
        strcmp(entry->d_name, "..") == 0)
        continue;
    
  2. 不是线程安全的

    • 线程安全版本:readdir_r()(已不推荐)
    • 新标准推荐:readdir() + 本地变量
  3. 只返回文件名,不含路径

    • 需要自己拼接路径

六、常见相关函数对比

函数 说明
opendir 打开目录
readdir 读取一个目录项
closedir 关闭目录
scandir 一次性读取并排序
getdents 更底层的系统调用

如果你是想问:

  • CentOS 内核里的 readdir
  • Shell 命令中的 readdir
  • Python / Java 中的对应函数

可以告诉我,我可以具体展开。

0 踩