温馨提示×

怎样测试Debian readdir功能

小樊
35
2026-06-30 21:33:35
栏目: 智能运维

在 Debian(或其他 Linux)系统上测试 readdir 功能,通常可以从系统调用层面、glibc API 层面、以及实际应用层面来做。下面按常用、实用程度给你几种方法。


一、最简单:用 ls 间接测试 readdir

ls 本身就依赖 readdir,是最直观的验证方式。

mkdir testdir
touch testdir/{a,b,c}.txt
ls testdir

✅ 如果能正常列出文件,说明 readdir 基本可用。


二、用 C 程序直接测试 readdir(推荐)

1️⃣ 测试 readdir()(glibc API)

// test_readdir.c
#include <stdio.h>
#include <dirent.h>

int main() {
    DIR *dir = opendir(".");
    if (!dir) {
        perror("opendir");
        return 1;
    }

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

    closedir(dir);
    return 0;
}

编译并运行:

gcc test_readdir.c -o test_readdir
./test_readdir

✅ 能看到 ... 及其他文件,说明 readdir() 正常工作。


2️⃣ 测试 readdir_r()(线程安全版本,已不推荐)

readdir_r(dir, &entry, &result);

⚠️ 在最新 glibc 中 readdir_r 已被标记为 deprecated,但仍然可以使用。


三、测试系统调用 getdents(内核态)

readdir() 实际上是 getdents / getdents64 的封装。

示例:使用 strace 观察

strace ls testdir

你会看到类似:

getdents(3, /* 10 entries */, 32768) = 200

✅ 说明内核 readdir 流程正常。


四、测试错误情况(健壮性测试)

1️⃣ 不存在的目录

opendir("/not_exist");

预期:

opendir: No such file or directory

2️⃣ 权限不足

mkdir private
chmod 000 private
./test_readdir private

预期:

opendir: Permission denied

五、测试大目录(性能 / 行为)

mkdir bigdir
for i in $(seq 1 10000); do touch bigdir/file_$i; done
./test_readdir bigdir

✅ 可验证 readdir 是否能正确处理大量目录项。


六、对比 readdir 与 shell 行为

ls bigdir | wc -l
./test_readdir bigdir | wc -l

数字应一致。


七、常见问题排查

1️⃣ 文件系统问题

  • NFS / FUSE / overlayfs 可能导致 readdir 行为异常
  • 可换 ext4 再测

2️⃣ glibc 版本

ldd --version

3️⃣ 32/64 位系统

  • d_off 在 32 位系统上可能溢出

八、总结(推荐测试流程)

最推荐方式

  1. ls → 快速验证
  2. 写 C 程序调用 readdir() → 精确测试
  3. strace ls → 看系统调用
  4. 异常目录 + 权限测试 → 验证健壮性

如果你是想:

  • 验证 Debian 某个版本的 bug
  • 内核 / glibc 对 readdir 的兼容性
  • 嵌入式 / chroot / Docker 环境

可以告诉我具体场景,我可以给你针对性更强的测试方案

0