温馨提示×

debian readdir参数怎么用

小樊
38
2026-10-24 22:54:21
栏目: 智能运维

在 Debian(以及其它 Linux 系统)里,readdir 通常指 C 语言中的目录读取函数,或者命令行里容易混淆的 readdir 相关工具。下面分情况说明。


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

1️⃣ 函数原型

#include <dirent.h>

struct dirent *readdir(DIR *dirp);

2️⃣ 参数说明

  • dirp
    • 类型:DIR *
    • 由 opendir() 返回的目录流指针
    • 不能是 NULL

3️⃣ 返回值

  • 成功:指向 struct dirent 的指针
  • 读到目录尾:返回 NULL
  • 出错:返回 NULL,并设置 errno

4️⃣ 基本使用示例(Debian / Linux 通用)

#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 readdir_example.c -o readdir_example

5️⃣ struct dirent 常用字段

struct dirent {
    ino_t          d_ino;
    off_t          d_off;
    unsigned short d_reclen;
    unsigned char  d_type;
    char           d_name[256];
};

常用:

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

示例(只列目录):

if (entry->d_type == DT_DIR) {
    printf("[DIR] %s\n", entry->d_name);
}

二、你可能混淆的几个点

❌ 命令行里没有 readdir 命令

如果你在 shell 里输入:

readdir

会提示:

command not found

类似功能的命令是:

  • ls
  • find
  • tree

✅ 相关系统调用(进阶)

  • readdir() → 标准 C 库
  • getdents() / getdents64() → 底层系统调用(不推荐直接用)

三、常见问题

1️⃣ readdir 会读到 . 和 .. 吗?

会,需要自己过滤:

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

2️⃣ 线程安全版本(Debian 支持)

int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);

⚠️ 已不推荐,现代程序直接用 readdir + 加锁即可。


四、总结一句话

Debian 下 readdir 是 C 函数,参数是 opendir() 返回的 DIR *,用来逐个读取目录项。

如果你是指:

  • 某个具体程序 / 脚本里的 readdir
  • Python / Shell / 其他语言
  • 想遍历目录的最佳方式

可以告诉我你的使用场景,我可以给你更精确的例子。

0 踩