[c] wykrycie zmiany pliku

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Pawel2420
Piegowaty Guziec
Piegowaty Guziec
Posty: 14
Rejestracja: 07 sty 2011, 16:14
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64

[c] wykrycie zmiany pliku

Post autor: Pawel2420 »

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 ?
Awatar użytkownika
DDAroo
Serdeczny Borsuk
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

Post autor: DDAroo »

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
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość