在Linux中,readdir
函數用于讀取目錄中的文件和子目錄。要使用readdir
實現目錄遍歷,你需要遵循以下步驟:
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
使用opendir()
函數打開一個目錄。如果成功,它將返回一個指向DIR
結構的指針。
DIR *dir = opendir(path);
if (dir == NULL) {
perror("opendir");
exit(EXIT_FAILURE);
}
使用readdir()
函數讀取目錄中的每個條目。readdir()
函數接受一個指向DIR
結構的指針,并返回一個指向struct dirent
結構的指針,其中包含有關目錄條目的信息。
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
// 處理目錄條目
}
在完成目錄遍歷后,使用closedir()
函數關閉目錄。
closedir(dir);
下面是一個完整的示例,展示了如何使用readdir()
遍歷目錄并打印文件名:
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage: %s <directory>\n", argv[0]);
return EXIT_FAILURE;
}
const char *path = argv[1];
DIR *dir = opendir(path);
if (dir == NULL) {
perror("opendir");
return EXIT_FAILURE;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return EXIT_SUCCESS;
}
編譯并運行此程序,傳入要遍歷的目錄作為參數:
gcc -o listdir listdir.c
./listdir /path/to/directory
這將打印出指定目錄中的所有文件和子目錄。