在Linux中,readdir
函數用于讀取目錄中的文件和子目錄。要自定義readdir
函數,您可以創建一個包裝函數,該函數在調用原始的readdir
函數之前或之后執行一些額外的操作。以下是一個簡單的示例,展示了如何自定義readdir
函數:
#include <stdio.h>
#include <dirent.h>
#include <string.h>
// 自定義結構體,用于存儲目錄條目信息
typedef struct {
char name[256];
int is_directory;
} custom_dirent;
// 自定義readdir函數
int custom_readdir(DIR *dirp, custom_dirent *entry) {
struct dirent *d;
int ret = readdir(dirp, d);
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 - %s\n", custom_entry.name, custom_entry.is_directory ? "Directory" : "File");
}
closedir(dir);
return 0;
}
在這個示例中,我們首先定義了一個名為custom_dirent
的自定義結構體,用于存儲目錄條目的名稱和是否為目錄的信息。然后,我們創建了一個名為custom_readdir
的自定義函數,該函數接受一個DIR
指針和一個custom_dirent
結構體指針作為參數。在自定義函數中,我們調用了原始的readdir
函數,并將結果存儲在自定義結構體中。
最后,在main
函數中,我們使用自定義的custom_readdir
函數來讀取目錄中的文件和子目錄,并打印它們的名稱和類型。