溫馨提示×

readdir如何實現目錄監控

小樊
53
2025-08-20 13:19:34
欄目: 編程語言

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。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女