温馨提示×

ubuntu readdir怎样获取文件

小樊
46
2026-10-03 16:09:50
栏目: 智能运维

在 Ubuntu(Linux)下,使用 readdir 获取目录中的文件,通常配合 opendir / readdir / closedir 这一组 POSIX 接口使用。

下面给你一个完整、可直接编译运行的示例。


一、基本流程

opendir()   // 打开目录
  ↓
readdir()   // 逐个读取目录项
  ↓
closedir()  // 关闭目录

二、最简示例(C 语言)

#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>

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

    if (argc < 2) {
        fprintf(stderr, "用法: %s <目录>\n", argv[0]);
        return 1;
    }

    dir = opendir(argv[1]);
    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 /path/to/dir

例如:

./readdir_example .

四、readdir 返回的结构体

struct dirent {
    ino_t          d_ino;     // inode 号
    off_t          d_off;     // 偏移
    unsigned short d_reclen;  // 记录长度
    unsigned char  d_type;    // 文件类型
    char           d_name[];  // 文件名
};

常见 d_type 值

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

五、只获取“普通文件”示例

while ((entry = readdir(dir)) != NULL) {
    if (entry->d_type == DT_REG) {
        printf("文件: %s\n", entry->d_name);
    }
}

六、忽略 . 和 ..

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

七、进阶(获取文件详细信息)

如需大小、权限、修改时间,配合:

stat() / lstat()

如果你需要 递归遍历目录 或 C++ / Python 版本,也可以告诉我。

0 踩