在 Ubuntu(Linux)里,opendir() 不是命令,而是一个 C 语言函数,用来打开目录并配合 readdir()、closedir() 使用。下面给你一个从概念到示例的完整说明。
opendir 是什么?opendir() 用于打开一个目录流,定义在:
#include <dirent.h>
函数原型:
DIR *opendir(const char *name);
DIR*NULL,并设置 errnonano listdir.c
#include <stdio.h>
#include <dirent.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("用法: %s <目录>\n", argv[0]);
return 1;
}
DIR *dir = opendir(argv[1]);
if (dir == NULL) {
perror("opendir");
return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
gcc listdir.c -o listdir
./listdir /home
输出示例:
.
..
user1
user2
(. 和 .. 是特殊目录)
| 函数 | 作用 |
|---|---|
opendir() |
打开目录 |
readdir() |
读取目录项 |
closedir() |
关闭目录 |
struct dirent |
目录项结构 |
#include <dirent.h>
./listdir /not_exist
会输出:
opendir: No such file or directory
那其实不需要 opendir,直接用:
ls
或
ls -l
可以用 std::filesystem(C++17 以后):
#include <filesystem>
namespace fs = std::filesystem;
for (auto &p : fs::directory_iterator(".")) {
std::cout << p.path() << std::endl;
}
如果你愿意,我可以帮你:
struct dirent 的每个字段opendir 和 find / ls 的实现原理你现在是 写 C 程序 还是 刚看到这个函数不太理解?