readdir
是一個用于讀取目錄內容的函數,它會返回目錄中的文件和子目錄的名稱。在處理符號鏈接和隱藏文件時,readdir
的行為如下:
符號鏈接:當目錄中包含符號鏈接時,readdir
會返回符號鏈接本身的名稱,而不是它所指向的目標文件或目錄。如果你想要獲取符號鏈接指向的目標,你可以使用 readlink
函數。
隱藏文件:在 Unix 和類 Unix 系統(如 Linux 和 macOS)中,以點(.
)開頭的文件被視為隱藏文件。readdir
會正常返回這些隱藏文件的名稱,就像它們是普通文件一樣。在 Windows 系統中,隱藏文件通常具有特定的屬性,readdir
也會返回這些文件的名稱。
下面是一個簡單的示例,展示了如何使用 readdir
讀取目錄內容并處理符號鏈接和隱藏文件:
#include <stdio.h>
#include <dirent.h>
#include <string.h>
int main() {
DIR *dir;
struct dirent *entry;
dir = opendir(".");
if (dir == NULL) {
perror("opendir");
return 1;
}
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
這個示例會列出當前目錄下的所有文件和子目錄,包括符號鏈接和隱藏文件。如果你想要區分符號鏈接和普通文件,可以使用 lstat
函數獲取文件的詳細信息,然后檢查 S_ISLNK
宏來判斷是否為符號鏈接。