readdir函數在Linux編程中主要用于遍歷目錄。以下是一些常見的應用場景:
DIR *dir;
struct dirent *entry;
dir = opendir(".");
if (dir == NULL) {
perror("opendir");
return EXIT_FAILURE;
}
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
.txt、.jpg等)。char *ext = ".txt";
while ((entry = readdir(dir)) != NULL) {
if (strstr(entry->d_name, ext) != NULL) {
printf("%s\n", entry->d_name);
}
}
void list_directory_contents(const char *path) {
DIR *dir;
struct dirent *entry;
char full_path[PATH_MAX];
dir = opendir(path);
if (dir == NULL) {
perror("opendir");
return;
}
while ((entry = readdir(dir)) != NULL) {
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
continue;
snprintf(full_path, sizeof(full_path), "%s/%s", path, entry->d_name);
if (entry->d_type == DT_DIR) {
list_directory_contents(full_path);
} else {
printf("%s\n", full_path);
}
}
closedir(dir);
}
int count = 0;
while ((entry = readdir(dir)) != NULL) {
count++;
}
printf("Total files: %d\n", count);
readdir時檢查當前用戶權限,并將相關信息寫入審計日志。readdir返回的dirent結構體中的d_name字段是相對路徑名,如果需要絕對路徑,可以使用realpath函數。opendir、readdir和closedir等函數的返回值。總之,readdir是一個非常強大且靈活的工具,適用于多種與目錄操作相關的編程任務。