Я пытаюсь написать программу, которая будет постоянно отслеживать изменения в файле и выполнять несколько действий соответственно. Я использую 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");
}
}
Я проверил страницу выбора вручную и каждый раз, когда выбирает(), восстанавливает дескриптор fd_set. Тем не менее, всякий раз, когда я изменяю файл (input.txt), этот код просто петли бесконечно. Я не очень опытный, используя inotify и select, поэтому я уверен, что проблема связана с тем, как я использую inotify или select. Буду признателен за любые намеки и рекомендации.