温馨提示×

ubuntu copendir报错了怎么办

小樊
34
2026-10-17 07:17:41
栏目: 智能运维

在 Ubuntu(Linux)下,opendir() 报错了,一般不是“系统问题”,而是路径、权限或代码使用方式的问题。可以按下面步骤排查。


一、先确认错误原因(关键)

opendir() 失败时返回 NULL,并且会设置 errno。

一定要打印错误信息:

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

DIR *dir = opendir("/some/path");
if (dir == NULL) {
    printf("opendir failed: %s\n", strerror(errno));
}

常见 errno 含义:

errno 含义
ENOENT 目录不存在
EACCES 权限不足
ENOTDIR 路径不是目录
EMFILE / ENFILE 文件描述符用光了

二、常见原因及解决办法

1️⃣ 路径不存在(最常见)

opendir("/home/user/nonexist");

✅ 解决:

ls -ld /home/user/nonexist

确保路径存在,且是目录。


2️⃣ 权限不足

ls -ld /root

✅ 解决:

  • 用 sudo 运行程序
  • 或修改目录权限:
chmod 755 dir

3️⃣ 打开的不是目录

opendir("/etc/passwd");

✅ 解决: 确认是目录,不是文件。


4️⃣ 相对路径问题

opendir("test");

✅ 解决:

  • 确认当前工作目录
system("pwd");
  • 或改用绝对路径

5️⃣ 忘记包含头文件

#include <dirent.h>
#include <sys/types.h>

三、最小可用示例

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

int main() {
    DIR *dir = opendir("/tmp");
    if (!dir) {
        perror("opendir");
        return 1;
    }

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

    closedir(dir);
    return 0;
}

四、如果你愿意

你可以直接把:

  • 报错信息
  • 代码片段
  • 路径 / 权限情况

发出来,我可以帮你精确定位问题。

0 踩