温馨提示×

Debian readdir目录

小樊
35
2026-07-27 23:14:03
栏目: 智能运维

在 Debian(以及大多数 Linux 发行版)中,readdir 通常用于 读取目录内容。下面从 系统调用 / glibc 函数常见用法示例 两方面说明。


一、readdir 是什么?

readdir 是 POSIX 标准定义的目录读取函数,定义在:

#include <dirent.h>

✅ 用于逐个读取目录中的文件和子目录
✅ 常见于 C / C++ 程序
✅ Debian、Ubuntu、CentOS 等系统通用


二、基本用法(C 语言示例)

示例代码:列出目录内容

#include <stdio.h>
#include <dirent.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;
}

编译

gcc readdir_example.c -o readdir_example

运行

./readdir_example

三、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]; // 文件名
};

常见 d_type

类型
DT_REG 普通文件
DT_DIR 目录
DT_LNK 符号链接

⚠️ 注意:d_type 在某些文件系统(如 FAT、NFS)上可能不可用。


四、Python 中的等价方式(对比)

Debian 上 Python 没有直接使用 readdir,但等价操作:

import os

for name in os.listdir("."):
    print(name)

五、Shell 中对应命令

ls

底层实际上也使用了 readdir / getdents


六、常见问题

1️⃣ ... 为什么会出现?

readdir 会返回目录中的 所有项,包括:

.  当前目录
.. 上级目录

2️⃣ 如何过滤隐藏文件?

if (entry->d_name[0] != '.') {
    printf("%s\n", entry->d_name);
}

七、底层系统调用

在 Debian 上,readdir 实际由以下系统调用实现:

getdents()
getdents64()

可用 strace 查看:

strace ls

如果你是想问:

  • Debian 下 readdir 报错
  • readdir 权限问题
  • readdir 性能问题
  • C++ / 其他语言中的 readdir

可以直接告诉我具体场景,我可以更详细地帮你分析。

0