温馨提示×

debian如何用copendir读目录

小樊
46
2026-09-22 05:37:22
栏目: 智能运维

在 Debian(及其他 Linux 系统)中,opendirPOSIX 标准 C 库函数,用于打开一个目录流,通常配合 readdirclosedir 使用来读取目录内容。

下面给你一个完整、可用的示例,并说明编译方法。


一、基本用法说明

相关头文件:

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

核心函数:

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

二、示例:读取指定目录

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

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

    DIR *dir = opendir(argv[1]);
    if (dir == NULL) {
        perror("opendir");
        return 1;
    }

    struct dirent *entry;
    while ((entry = readdir(dir)) != NULL) {
        printf("%s\n", entry->d_name);
    }

    closedir(dir);
    return 0;
}

三、编译与运行(Debian)

gcc readdir_example.c -o readdir_example
./readdir_example /etc

输出示例:

.
..
passwd
hosts
resolv.conf
...

四、常见注意事项

1. ...

readdir 会返回:

  • .(当前目录)
  • ..(上级目录)

通常需要过滤:

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

2. d_type 判断文件类型(Linux 扩展)

if (entry->d_type == DT_DIR)
    printf("[目录] %s\n");
else if (entry->d_type == DT_REG)
    printf("[文件] %s\n");

3. 失败处理

  • opendir 返回 NULL 时,用 perror 查看原因
  • 常见错误:
    • 目录不存在
    • 权限不足

如果你愿意,我也可以给你:

  • 递归遍历目录
  • C++ 版本(filesystem)
  • 只列出普通文件 / 目录
  • 按修改时间排序

直接告诉我你的使用场景即可。

0