温馨提示×

Debian copendir如何调用

小樊
44
2026-07-26 13:02:21
栏目: 智能运维

在 Debian(以及大多数 Linux 系统)中,opendir()POSIX 标准库函数,用于打开一个目录流,通常和 readdir()closedir() 一起使用。它定义在 <dirent.h> 中。

下面给你一个完整、可编译的示例,以及常见用法说明。


一、基本用法示例(C 语言)

示例代码:listdir.c

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

int main(int argc, char *argv[])
{
    const char *path = ".";  // 默认当前目录
    DIR *dir;
    struct dirent *entry;

    if (argc > 1) {
        path = argv[1];
    }

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

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

    closedir(dir);
    return EXIT_SUCCESS;
}

二、编译与运行(Debian)

gcc listdir.c -o listdir
./listdir
./listdir /etc

三、函数说明

1️⃣ opendir

DIR *opendir(const char *name);
  • 功能:打开目录
  • 参数:目录路径
  • 返回值
    • 成功:返回 DIR*
    • 失败:返回 NULL,并设置 errno

2️⃣ readdir

struct dirent *readdir(DIR *dirp);
  • 每次调用返回目录中的一个文件/子目录
  • 返回 NULL 表示结束或出错

3️⃣ closedir

int closedir(DIR *dirp);
  • 关闭目录流

四、常见错误

❌ 忘记检查返回值

DIR *dir = opendir("some_dir"); // 可能失败

✅ 正确做法:

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

❌ 用 printf 直接打印 d_type

entry->d_type == DT_REG  // 普通文件
entry->d_type == DT_DIR  // 目录

⚠️ 注意:d_type 在某些文件系统(如 ext4 支持,NFS 不一定)上可能不可用。


五、只列出普通文件(可选)

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

六、相关 man 手册(Debian 上查看)

man opendir
man readdir
man closedir

如果提示没有 man 页:

sudo apt install man-db manpages-dev

如果你是想问:

  • opendir 在 shell 中怎么用?
  • opendir 在 Python / C++ 中怎么用?
  • opendir 和 open() 的区别?

可以告诉我,我可以继续详细讲。

0