copendir 和 readdir 是 C 語言中常用的兩個函數,主要用于目錄遍歷操作。兩者的主要區別體現在功能和使用場景上。
- copendir 函數: copendir 函數的作用是開啟一個目錄流,并返回一個指向 DIR 類型結構體的指針。此結構體包含有目錄流的相關數據,可用于后續的目錄遍歷操作。若無法成功開啟目錄,則 copendir 函數會返回 NULL。
函數定義如下:
DIR *copendir(const char *name);
參數:
- name:需要開啟的目錄路徑。
返回值:
- readdir 函數: readdir 函數負責從目錄流中讀取下一個目錄條目。它接收一個指向 DIR 結構體的指針作為參數,并返回一個指向 struct dirent 結構體的指針,該結構體存儲了目錄條目的相關信息。當目錄流中已無更多條目時,readdir 函數會返回 NULL。
函數定義如下:
Struct dirent *readdir(DIR *dirp);
參數:
- dirp:指向 DIR 結構體的指針,一般由 copendir 函數返回。
返回值:
- 成功時,返回一個指向 struct dirent 結構體的指針,其中包含了目錄條目的信息。
- 失敗時,返回 NULL。
總結:
- copendir 用于啟動目錄流,返回一個 DIR 結構體指針。
- readdir 用于從目錄流中讀取下一個目錄條目,返回一個 struct dirent 結構體指針。
這兩個函數常常聯合使用,以便遍歷目錄中的所有文件及子目錄。以下為一個簡單的例子:
#include <stdio.h> #include <dirent.h> int main() { DIR *dir; struct dirent *entry; dir = copendir("."); if (dir == NULL) { perror("copendir"); return 1; } while ((entry = readdir(dir)) != NULL) { printf("%sn", entry->d_name); } closedir(dir); return 0; } </dirent.h></stdio.h>
這段代碼將會輸出當前目錄下的所有文件和子目錄。