Mam proces, który w kółko tworzy plik "A" następnie zmienia mu nazwę na "B"
Potrzebuję program, który po wykryciu zmiany pliku "B" coś tam zrobi.
Napisałem więc testowo taki kod:
fd = inotify_init();
while (1) {
wd = inotify_add_watch( fd, "B", IN_MODIFY );
read( fd, buffer, EVENT_BUF_LEN );
printf ("nastąpiła zmiana\n");
}
Po każdej zmianie pliku "B" dostaję aż trzy komunikaty.
Co jest tego powodem ?
[c] wykrycie zmiany pliku
- DDAroo
- Serdeczny Borsuk
- Posty: 107
- Rejestracja: 27 cze 2009, 10:47
- Płeć: Mężczyzna
- Wersja Ubuntu: 11.04
- Środowisko graficzne: KDE Plasma
- Architektura: x86
- Lokalizacja: Kraków
- Kontakt:
Odp: [c] wykrycie zmiany pliku
Kod: Zaznacz cały
#include <sys/inotify.h>
#include <limits.h>
#include <stdio.h>
#define BUF_LEN (10 * (sizeof(struct inotify_event) + NAME_MAX + 1))
int main(int argc, char *argv[])
{
int inotifyFd, wd;
char buf[BUF_LEN];
ssize_t numRead;
const char * fileName = "B";
inotifyFd = inotify_init();
if (inotifyFd == -1)
{
printf("inotify_init");
return -1;
}
wd = inotify_add_watch( inotifyFd, fileName, IN_MODIFY );
if (wd == -1)
{
printf("inotify_add_watch");
return -1;
}
printf("Watching %s\n", fileName);
while (1) {
numRead = read(inotifyFd, buf, BUF_LEN);
if (numRead == 0)
{
printf("read() returned 0");
return -1;
}
if (numRead == -1)
{
printf("read");
return -1;
}
printf("file modified\n");
}
return 0;
}
Kod: Zaznacz cały
daroo:~$ gcc test.c -o test
daroo:~$ ./test &
[2] 3527
daroo:~$ Watching B
echo 'sdgsdg' > B
daroo:~$ file modified
echo 'sdgsdg' > B
daroo:~$ file modified
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość