温馨提示×

ubuntu readdir在c中怎么用

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

在 Ubuntu(Linux)下使用 C 语言的 readdir 来读取目录,一般步骤如下:


一、相关头文件

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

二、基本用法示例

#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;
}

三、关键函数说明

1. opendir

DIR *opendir(const char *name);
  • 打开目录
  • 成功返回 DIR*,失败返回 NULL

2. readdir

struct dirent *readdir(DIR *dirp);
  • 每次调用返回一个目录项
  • 返回 NULL 表示读取结束或出错

3. 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:文件类型(可选)

4. closedir

int closedir(DIR *dirp);

四、过滤 . 和 ..

while ((entry = readdir(dir)) != NULL) {
    if (strcmp(entry->d_name, ".") == 0 ||
        strcmp(entry->d_name, "..") == 0)
        continue;
    printf("%s\n", entry->d_name);
}

五、编译运行

gcc readdir_example.c -o readdir_example
./readdir_example

六、常见错误

  • 忘记 closedir
  • 目录路径不存在
  • 权限不足(Permission denied)

如果你需要 递归遍历目录、区分文件/目录 或 使用 readdir_r(线程安全),我也可以继续讲。

0 踩