温馨提示×

Debian readdir示例

小樊
43
2026-07-27 23:22:10
栏目: 智能运维

下面是一个Debian(Linux)下使用 readdir 读取目录内容的 C 语言示例
readdir 属于 POSIX 标准,在 Debian / Ubuntu 等系统上都可以直接使用。


一、示例代码(readdir.c)

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

int main(int argc, char *argv[])
{
    const char *path;
    DIR *dir;
    struct dirent *entry;

    if (argc < 2) {
        path = ".";  // 默认当前目录
    } else {
        path = argv[1];
    }

    dir = opendir(path);
    if (dir == NULL) {
        perror("opendir");
        return EXIT_FAILURE;
    }

    printf("Reading directory: %s\n", path);

    while ((entry = readdir(dir)) != NULL) {
        // 跳过 "." 和 ".."
        if (strcmp(entry->d_name, ".") == 0 ||
            strcmp(entry->d_name, "..") == 0) {
            continue;
        }

        printf("%s\n", entry->d_name);
    }

    closedir(dir);
    return EXIT_SUCCESS;
}

二、编译(Debian / Ubuntu)

gcc readdir.c -o readdir

三、运行示例

./readdir
./readdir /home
./readdir /etc

输出示例:

Reading directory: /etc
passwd
shadow
hostname
network/
...

四、关键函数说明

DIR *opendir(const char *name);
struct dirent *readdir(DIR *dirp);
int closedir(DIR *dirp);

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

五、判断文件类型(可选)

if (entry->d_type == DT_REG) {
    printf("File: %s\n", entry->d_name);
} else if (entry->d_type == DT_DIR) {
    printf("Dir:  %s\n", entry->d_name);
}

⚠️ 注意:d_type 在某些文件系统(如 NFS)上可能不可用,此时需使用 stat()


如果你需要:

  • 递归遍历目录
  • 使用 readdir_r(已废弃)
  • C++ / Python 版本
  • 与 stat 结合判断真实类型

可以继续问我。

0