在 Debian(Linux) 下,opendir() 是 POSIX 标准库函数,用于打开一个目录流。它的返回值如下:
opendir() 函数原型#include <dirent.h>
DIR *opendir(const char *name);
DIR* 指针readdir()、closedir()DIR *dir = opendir("/home");
if (dir != NULL) {
// 成功
}
NULLerrno 表示错误原因常见错误包括:
| errno | 含义 |
|---|---|
ENOENT |
目录不存在 |
EACCES |
权限不足 |
ENOTDIR |
不是目录 |
EMFILE |
打开文件数过多 |
ENOMEM |
内存不足 |
#include <stdio.h>
#include <dirent.h>
#include <errno.h>
int main() {
DIR *dir = opendir("/tmp");
if (dir == NULL) {
perror("opendir failed");
return 1;
}
printf("opendir success\n");
closedir(dir);
return 0;
}
编译:
gcc test.c -o test
✅ 正确方式
if (dir == NULL) {
// 出错
}
❌ 错误方式
if (!dir) { } // 不推荐,虽然能用,但可读性差
readdir() 配合使用struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
opendir()成功返回DIR*指针,失败返回NULL并设置errno
如果你是想问 “怎么在 Debian 下用 C/C++ 获取目录列表” 或 “为什么 opendir 返回 NULL”,可以把代码贴出来,我可以帮你具体排查。