温馨提示×

debian readdir如何调用

小樊
37
2026-07-13 18:49:27
栏目: 智能运维

在 Debian(以及大多数 Linux 发行版)中,readdirPOSIX 标准 C 库函数,用于读取目录内容。它通常和 opendir / closedir 一起使用。

下面分几种常见情况说明 如何调用 readdir


一、基本用法(C 语言)

1️⃣ 头文件

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

2️⃣ 示例代码

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

int main(void)
{
    DIR *dir;
    struct dirent *entry;

    dir = opendir(".");
    if (dir == NULL) {
        perror("opendir");
        return 1;
    }

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

    closedir(dir);
    return 0;
}

3️⃣ 编译

gcc readdir_example.c -o readdir_example

4️⃣ 运行

./readdir_example

二、readdir 相关函数说明

函数 作用
opendir() 打开目录,返回 DIR*
readdir() 读取目录项
closedir() 关闭目录
readdir_r() 已废弃(线程安全版本)

三、struct dirent 常用字段

struct dirent {
    ino_t          d_ino;       // inode 号
    off_t          d_off;
    unsigned short d_reclen;
    unsigned char  d_type;      // 文件类型(DT_REG / DT_DIR 等)
    char           d_name[256]; // 文件名
};

⚠️ 注意:

  • d_type 不是所有文件系统都支持
  • 若不可靠,应使用 lstat() 判断文件类型

四、过滤 ...

if (strcmp(entry->d_name, ".") == 0 ||
    strcmp(entry->d_name, "..") == 0)
    continue;

五、在 Debian 上查看 man 手册

man readdir
man opendir
man closedir

如果提示没有 man 页:

sudo apt install man manpages manpages-dev

六、Shell 中替代方案(非 C)

虽然 readdir 是 C 函数,但 Shell 中可读目录:

ls

或:

for f in *; do
    echo "$f"
done

七、常见误区

readdir 不是系统调用

  • 它是 glibc 封装函数
  • 底层用的是 getdents

readdir 返回的是静态指针

  • 不能跨 readdir 调用保存 struct dirent

如果你需要:

  • readdir 在 C++ 中的用法
  • 递归遍历目录
  • readdir 与 getdents 的区别
  • 用 Python / Rust / Go 读目录

告诉我,我可以继续讲。

0