Есть проблема в реализации...
Некая программа(не знаю какая и как работает) пишет( и/или переписывает уже существующие) периодически в папку файлы типа *.tmp...
нужно при изменении или добавлении файлов копировать их в другую папку.
нашел inotify и inotify_add_watch & read.
отслеживает все, что происходит в папке(если файлы редактировать «вручную»)... супер!
НО вообще не реагирует на то, что делает(изменяет) та программа... может как то блокирует??
вообще не знаю что делать... какие есть еще методы, способы? желательно через плюсы.
void notifier(const char *dirname) {
int fd, wd;
char buf[BUFLEN];
ssize_t i, len;
struct inotify_event *event;
if( (fd = inotify_init()) < 0) {
perror("inotify_init:");
exit(-1);
}
wd = inotify_add_watch(fd, dirname,
IN_MODIFY | IN_ATTRIB |
IN_CREATE | IN_DELETE);
if(wd < 0) {
perror("inotify_add_watch");
exit(-1);
}
while(1) {
i = 0;
string file;
size_t found;
len = read(fd, buf, BUFLEN);
while(i < len) {
event = (struct inotify_event *) &buf[i];
file =string(event->name);
found=file.rfind(".tmp");
if (found >0) { if (strevent(event->mask)==2)
{sleep(1);
copyFile(file.erase(file.length()-4));}
}
i += sizeof(struct inotify_event) + event->len;
}
}
}