温馨提示×

debian readdir怎用

小樊
45
2026-09-13 09:06:23
栏目: 智能运维

在 Debian(以及一般的 Linux)里,readdir 通常指的是 C 语言里的 readdir() 函数,用来读取目录内容。下面分几种常见情况说明怎么用。


一、C 语言中使用 readdir()(最常见)

1️⃣ 头文件

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

2️⃣ 基本用法示例

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

int main() {
    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
./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[];  // 文件名
};

判断文件类型(d_type)

if (entry->d_type == DT_DIR) {
    printf("%s 是目录\n", entry->d_name);
} else if (entry->d_type == DT_REG) {
    printf("%s 是普通文件\n", entry->d_name);
}

三、过滤 . 和 ..

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

四、常见错误

  • ❌ 忘记 closedir() → 文件描述符泄漏
  • ❌ 用 readdir() 多线程不安全(用 readdir_r() 或 readdir64())
  • ❌ 目录路径不存在 → opendir() 返回 NULL

五、Shell 中“类似 readdir”的命令

如果你不是写 C 程序,而是想列目录:

ls
ls -a
find . -maxdepth 1

六、你具体是哪种需求?

你可以告诉我:

  • ✅ 写 C / C++ 程序?
  • ✅ 在 Bash / Python 里读目录?
  • ✅ 调试某个 readdir 相关错误?

我可以给你更精确的示例。

0 踩