在 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)
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() 或目录遍历的完整示例。