温馨提示×

centos readdir如何读取目录

小樊
38
2026-09-06 07:12:39
栏目: 智能运维

在 CentOS(Linux) 下,使用 C 语言通过 readdir 读取目录,一般流程是:

  1. 用 opendir() 打开目录
  2. 用 readdir() 循环读取目录项
  3. 用 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) {
        printf("Usage: %s <directory>\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;
}

二、编译与运行(CentOS)

gcc readdir_test.c -o readdir_test
./readdir_test /etc

三、struct dirent 常用字段

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

常见 d_type 值

宏 含义
DT_REG 普通文件
DT_DIR 目录
DT_LNK 符号链接
DT_UNKNOWN 未知

示例:只列出目录

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

四、过滤 . 和 ..

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

五、获取文件详细信息(如大小、权限)

readdir 只给文件名,要详细信息需用 stat():

#include <sys/stat.h>

struct stat st;
stat(entry->d_name, &st);
printf("size: %ld\n", st.st_size);

六、常见问题

1. 中文文件名乱码?

确保终端是 UTF-8:

locale

2. 权限不足?

使用 sudo 或确保目录可读。


如果你需要:

  • 递归读取目录
  • C++ / Python 版本
  • 按时间/大小排序
  • 读取隐藏文件

可以继续问我。

0 踩