在Linux系統中,readdir函數的作用是遍歷指定目錄下的文件和子目錄。如果想對這個函數進行自定義,可以通過創建一個封裝函數來實現,在調用原始readdir函數前后加入自己的邏輯處理。下面是一個簡單的演示:
#include <stdio.h> #include <dirent.h> #include <String.h> <p>// 自定義結構體,用于保存目錄項數據 typedef Struct { char name[256]; int is_Directory; } custom_dirent;</p><p>// 自定義的readdir函數 int custom_readdir(DIR <em>dirp, custom_dirent </em>entry) { struct dirent *d; int ret = readdir(dirp, d);</p><pre class="brush:php;toolbar:false">if (ret == 0) { // 已經到達目錄末尾 return 0; } // 將獲取到的信息存入自定義結構體 strncpy(entry->name, d->d_name, sizeof(entry->name)); entry->is_directory = (d->d_type == DT_DIR); return 1;
}
int main(int argc, char argv[]) { DIR dir; struct dirent *entry; custom_dirent custom_entry;
if (argc != 2) { fprintf(stderr, "Usage: %s <directory>n", argv[0]); return 1; } dir = opendir(argv[1]); if (!dir) { perror("opendir"); return 1; } while (custom_readdir(dir, &custom_entry)) { printf("%s - %sn", custom_entry.name, custom_entry.is_directory ? "Directory" : "File"); } closedir(dir); return 0;
}
上述代碼展示了整個過程:首先聲明了一個custom_dirent結構體,用來保存目錄項的名字以及是否為目錄的判斷結果;接著編寫了custom_readdir函數,該函數內部調用了標準的readdir函數,并將返回的數據整理后放入自定義結構體中。
main函數部分實現了程序入口邏輯,檢查用戶輸入參數、打開指定目錄,并通過循環調用自定義的custom_readdir函數讀取并輸出目錄內容,包括每個條目名稱及其類型(文件或目錄)。