温馨提示×

debian readdir有什么作用

小樊
43
2026-09-25 15:24:56
栏目: 智能运维

在 Debian(以及所有 Linux/Unix 系统)里,readdir 并不是 Debian 独有的命令,而是 C 语言标准库(glibc)中的一个函数,用于读取目录内容。


一、readdir 是什么?

readdir 是 POSIX 标准定义的 目录读取函数,原型如下:

#include <dirent.h>

struct dirent *readdir(DIR *dirp);

作用:从已打开的目录流中,读取下一个目录项(文件或子目录)。


二、核心作用

当你用 opendir() 打开一个目录后,就可以用 readdir() 逐个读取里面的内容,例如:

  • 文件名
  • 文件类型(普通文件、目录、符号链接等)

它常用于:

  • 编写 ls 类程序
  • 文件遍历工具
  • 备份 / 扫描脚本(C 程序)

三、典型使用流程

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

int main() {
    DIR *dir = opendir("/etc");
    struct dirent *entry;

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

    closedir(dir);
    return 0;
}

输出示例:

passwd
hostname
network
...

四、readdir 返回的内容

返回的是一个 struct dirent 结构,常用字段:

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

常见 d_type:

  • DT_REG:普通文件
  • DT_DIR:目录
  • DT_LNK:符号链接

五、相关函数对比

函数 作用
opendir 打开目录
readdir 读取目录项
closedir 关闭目录
readdir_r 线程安全版本(已不推荐)
scandir 一次性读取并排序目录

六、Debian 中的实际例子

在 Debian 中,很多命令的底层实现都用到 readdir,例如:

  • /bin/ls
  • find
  • du
  • rsync(部分逻辑)

如果你在 Debian 上写 C 程序,它直接来自 libc6(glibc)。


七、常见误区

❌ readdir 不是 shell 命令
✅ 它是 C 函数

❌ 不会自动递归子目录
✅ 需要自己递归调用


如果你是想问:

  • shell 中如何“像 readdir 一样”读目录
  • Python / Bash 中等价用法
  • 为什么 readdir 会读到 . 和 ..

可以继续问我。

0 踩