readdir 和 readdir_r 都是用于读取目录内容的函数,但它们之间存在一些关键区别:
readdir 不是线程安全的。readdir 可能会导致数据竞争和不一致的结果。struct dirent 的指针,该结构体包含了目录项的信息。NULL。DIR *dir = opendir("/path/to/directory");
if (dir == NULL) {
perror("opendir");
return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
readdir 使用全局变量来跟踪当前读取的位置,这可能导致在多线程环境中出现问题。readdir_r 是线程安全的版本。DIR *dir = opendir("/path/to/directory");
if (dir == NULL) {
perror("opendir");
return 1;
}
struct dirent buffer;
struct dirent *entry;
while ((entry = readdir_r(dir, &buffer, &entry)) == 0) {
printf("%s\n", entry->d_name);
}
if (entry != NULL) {
perror("readdir_r");
}
closedir(dir);
readdir_r 使用局部变量来跟踪当前读取的位置,因此在多线程环境中更加安全。readdir。readdir_r。需要注意的是,现代的 POSIX 标准已经推荐使用 readdir_r 的替代方案,如 readdir 的线程安全版本(在某些系统上可能不可用),或者使用更高级别的抽象,如 dirent.h 中的其他函数。