在 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 函數讀取目錄中的所有條目,并將它們打印到屏幕上。如果在讀取過程中遇到錯誤,程序將打印錯誤信息并退出。