readdir
是一個用于讀取目錄內容的函數,通常在 C 語言中使用。要實現目錄監控,你可以定期調用 readdir
函數來檢查目錄內容是否發生變化。以下是一個簡單的示例,展示了如何使用 readdir
實現目錄監控:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <time.h>
#define CHECK_INTERVAL 1 // 監控間隔時間,單位:秒
int main() {
const char *dir_path = "/path/to/your/directory"; // 要監控的目錄路徑
struct dirent *entry;
DIR *dp;
struct stat dir_stat_before, dir_stat_after;
int directory_exists = 1;
// 獲取初始目錄狀態
if (stat(dir_path, &dir_stat_before) != 0) {
perror("stat");
return 1;
}
while (1) {
sleep(CHECK_INTERVAL);
// 檢查目錄是否存在
if (access(dir_path, F_OK) == -1) {
directory_exists = 0;
break;
}
if (directory_exists) {
// 獲取更新后的目錄狀態
if (stat(dir_path, &dir_stat_after) != 0) {
perror("stat");
return 1;
}
// 比較目錄狀態,如果發生變化,則重新讀取目錄內容
if (memcmp(&dir_stat_before, &dir_stat_after, sizeof(dir_stat_before)) != 0) {
printf("Directory changed, updating...\n");
// 關閉之前的目錄流
if (dp) {
closedir(dp);
}
// 打開目錄
dp = opendir(dir_path);
if (!dp) {
perror("opendir");
return 1;
}
// 讀取并打印目錄內容
while ((entry = readdir(dp)) != NULL) {
printf("%s\n", entry->d_name);
}
// 關閉目錄流并更新目錄狀態
closedir(dp);
memcpy(&dir_stat_before, &dir_stat_after, sizeof(dir_stat_before));
}
} else {
printf("Directory does not exist anymore.\n");
break;
}
}
return 0;
}
這個示例程序會每隔 CHECK_INTERVAL
秒檢查一次指定目錄的內容是否發生變化。如果發生變化,它會重新讀取目錄并打印出新的內容。請注意,這個示例僅適用于簡單的目錄監控場景,可能無法檢測到所有類型的文件系統事件。對于更高級的目錄監控需求,你可以考慮使用操作系統提供的專門工具或庫,如 Linux 的 inotify 或 Windows 的 ReadDirectoryChangesW。