在 CentOS 系统中,使用 readdir 函数进行目录读取时,可能会遇到一些错误。为了确保程序的健壮性,我们需要对这些错误进行处理。以下是一些建议:
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
DIR *dir = opendir(path);
if (dir == NULL) {
perror("opendir");
exit(EXIT_FAILURE);
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
// 处理目录条目
}
在 while 循环中,readdir 函数会在遇到错误或到达目录末尾时返回 NULL。为了区分这两种情况,可以使用 errno 变量:
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
if (errno != 0) {
perror("readdir");
closedir(dir);
exit(EXIT_FAILURE);
}
// 处理目录条目
}
在程序结束前,确保关闭已打开的目录:
closedir(dir);
将以上代码整合到一个完整的示例中:
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage: %s <directory_path>\n", argv[0]);
return EXIT_FAILURE;
}
const char *path = argv[1];
DIR *dir = opendir(path);
if (dir == NULL) {
perror("opendir");
return EXIT_FAILURE;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
if (errno != 0) {
perror("readdir");
closedir(dir);
return EXIT_FAILURE;
}
// 处理目录条目,例如打印文件名
printf("%s\n", entry->d_name);
}
closedir(dir);
return EXIT_SUCCESS;
}
这个示例程序接受一个目录路径作为命令行参数,然后使用 readdir 函数读取目录中的所有条目,并将它们打印到屏幕上。如果在读取过程中遇到错误,程序将打印错误信息并退出。