在 Ubuntu / Linux 下,如果你说的是 copendir(),它并不是 glibc 里的标准函数,所以对你的问题可以分几种情况来理解:
这是标准的目录遍历接口:
#include <dirent.h>
DIR *opendir(const char *name);
struct dirent *readdir(DIR *dirp);
int closedir(DIR *dirp);
✅ 没有 copendir(),标准接口就是这些。
#include <glib.h>
GDir *g_dir_open(const gchar *path, guint flags, GError **error);
#include <filesystem>
for (auto &p : std::filesystem::directory_iterator(".")) {
}
Ubuntu 下没有系统调用级的 copendir,因为 Linux 不提供“复制目录”的系统调用。
cp -r src_dir dst_dir
opendir + readdir + mkdir + cp这是标准做法:
DIR *dir = opendir(src);
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
// 跳过 . 和 ..
// 判断类型
// 递归复制
}
closedir(dir);
nftw()(推荐)#include <ftw.h>
int copy(const char *fpath, const struct stat *sb,
int typeflag, struct FTW *ftwbuf) {
// 根据 typeflag 复制文件/目录
}
nftw(src, copy, 20, FTW_PHYS);
rsync(高级复制)rsync -a src/ dst/
| 目的 | 替代品 |
|---|---|
| 遍历目录 | opendir/readdir |
| 复制目录 | cp -r / rsync |
| 高层 API | GDir / std::filesystem |
| 批量操作 | nftw |
Linux / Ubuntu 没有
copendir(),也没有系统级“复制目录”的函数。
目录复制一般用opendir + readdir + mkdir + cp,或直接使用cp -r / rsync。
如果你愿意,可以告诉我:
我可以给你一段完全可用的示例代码。