alt=”linux readdir如何實現目錄監控” />
在Linux系統中,readdir 函數是一種常用的系統調用,用于從目錄中讀取條目。若要實現目錄監控,可以結合 readdir 與其他Linux特性,比如 inotify。以下是一個簡化的實例,展示了如何利用 readdir 和 inotify 來監控目錄的變化。
使用 readdir 讀取目錄內容
首先,讓我們看看如何使用 readdir 來讀取目錄中的內容:
#include <stdio.h> #include <stdlib.h> #include <dirent.h> #include <string.h> <p>int main(int argc, char <em>argv[]) { DIR </em>dir; struct dirent *entry;</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">if (argc != 2) { fprintf(stderr, "Usage: %s <directory>
“, argv[0]); return EXIT_FAILURE; }
dir = opendir(argv[1]); if (dir == NULL) { perror("opendir"); return EXIT_FAILURE; } while ((entry = readdir(dir)) != NULL) { printf("%s
“, entry->d_name); }
closedir(dir); return EXIT_SUCCESS;
}
使用 inotify 監控目錄
inotify 是Linux內核提供的一個功能,它允許用戶空間的應用程序監控文件系統事件。通過 inotify 可以監控目錄的變化,并在有變動時采取相應的操作。
下面的例子展示了如何使用 inotify 來監控目錄的變化:
#include <stdio.h></p><h1>include <stdlib.h></h1><h1>include <string.h></h1><h1>include <sys/inotify.h></h1><h1>include <unistd.h></h1><h1>define Event_SIZE (sizeof(struct inotify_event))</h1><h1>define BUF_len (1024 * (EVENT_SIZE + 16))</h1><p>int main(int argc, char *argv[]) { int Length, i = 0; int fd; int wd; char buffer[BUF_LEN];</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">if (argc != 2) { fprintf(stderr, "Usage: %s <directory>