我正在嘗試編寫一個程序,該程序將不斷跟蹤文件中的更改並相應地執行一些操作。我正在使用inotify並在循環中選擇以非阻塞方式跟蹤文件修改。我的程序的文件跟蹤部分的基本結構如下。在循環中使用select()監控文件更改
#include <cstdio>
#include <signal.h>
#include <limits.h>
#include <sys/inotify.h>
#include <fcntl.h>
#include <iostream>
#include <fstream>
#include <string>
int main(int argc, char **argv)
{
const char *filename = "input.txt";
int inotfd = inotify_init();
char buffer[1];
int watch_desc = inotify_add_watch(inotfd, filename, IN_MODIFY);
size_t bufsiz = sizeof(struct inotify_event) + 1;
struct inotify_event* event = (struct inotify_event *) &buffer[0];
fd_set rfds;
FD_ZERO (&rfds);
struct timeval timeout;
while(1)
{
/*select() intitialisation.*/
FD_SET(inotfd,&rfds); //keyboard to be listened
timeout.tv_sec = 10;
timeout.tv_usec = 0;
int res=select(FD_SETSIZE,&rfds,NULL,NULL,&timeout);
FD_ZERO(&rfds);
printf("File Changed\n");
}
}
我檢查了select手冊頁,並在每次select()返回時重置fd_set描述符。但是,每當我修改文件(input.txt)時,這段代碼就會無限循環。我不是非常有經驗的使用inotify和select,所以我相信如果問題出在我使用inotify或select的方式。我會很感激任何提示和建議。