温馨提示×

Ubuntu如何判断copendir失败

小樊
44
2026-08-02 20:22:12
栏目: 智能运维

在 Linux(Ubuntu)下使用 opendir() 打开目录时,判断失败的方式是检查返回值是否为 NULL,并结合 errno 获取失败原因。


一、基本判断方法

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

int main() {
    DIR *dir = opendir("/some/path");

    if (dir == NULL) {
        // opendir 失败
        perror("opendir failed");
        return 1;
    }

    // 成功
    closedir(dir);
    return 0;
}

失败条件:

if (dir == NULL)

二、常见的失败原因(errno)

opendir() 失败时,errno 会被设置:

errno 含义
ENOENT 目录不存在
EACCES 没有访问权限
ENOTDIR 路径不是目录
EMFILE / ENFILE 打开文件数过多
ENOMEM 内存不足

示例:

#include <dirent.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() {
    DIR *dir = opendir("/not/exist");

    if (dir == NULL) {
        printf("opendir failed: %s\n", strerror(errno));
        return 1;
    }

    closedir(dir);
    return 0;
}

三、与 open() 的区别(容易混淆)

函数 返回值 失败判断
open() int fd fd < 0
opendir() DIR * dir == NULL

⚠️ 不要这样判断:

if (dir < 0)   // ❌ 错误

四、完整示例(推荐写法)

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

int main(int argc, char *argv[]) {
    if (argc != 2) {
        printf("Usage: %s <dir>\n", argv[0]);
        return 1;
    }

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

    printf("opendir success\n");

    closedir(dir);
    return 0;
}

五、总结一句话

在 Ubuntu / Linux 中,opendir() 失败时返回 NULL,通过 errno 判断具体原因。

如果你愿意,我也可以帮你分析 readdir()closedir() 或目录遍历的完整示例

0