Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dateiüberwachung INotify



7.e.Q
04-05-2006, 10:50
Hi Leute,

wer hat hier schonmal mit INotify gearbeitet und kann mir sagen, wie man damit in einem schon existierenden (auf select() basierenden) Programm am besten eine Überwachung einzelner Dateien implementiert?

7.e.Q
05-05-2006, 09:15
So, da der Thread in Linuxforen vielleicht nicht ganz so gut aufgehoben ist, pack ich das ganze mal hier rein:

Ich hab mir bei Google schon die Finger wund gesucht. Da ist nirgends was zu finden, wo wirklich steht, wie man in 'nem eigenen Programm den INotify Mechanismus einsetzt. Ich hab mir mal die Sourcen gezogen von INotify Utils V0.25. Dort ist zu sehen, wie man das macht. Leider scheint es so in meinem Programm nicht zu funktionieren. Ich bekomme zwar das Event ( über select() ), daß da Daten in dem INotify Device anstehen, kann auch lesen drauf ( read() ), bekomme aber immer 0 Bytes von read() zurück. Darauf folgt noch ein Event ( über select() ), auf das ein weiteres Lesen per read() dann blockiert.

Initialisiert und geöffnet hab ich das INotify Gerät über



syscall( __NR_inotify_init ); // __NR_inotify_init = 291


Einen Watch hinzugefügt habe ich über


syscall( __NR_inotify_add_watch, fd, filename.c_str(), mask); // __NR_inotify_add_watch = 292; fd = Rückgabewert von syscall __NR_inotify_init; filename = Name der zu überwachenden Datei; mask = 0xFFFFFFFF;


Das Testprogramm inotify_test aus den INotify Utils 0.25 funktioniert.

EDIT: Der erste Leseversuch liest tatsächlich etwas aus. 48 Bytes insgesamt... Aber wieso kommt da noch ein Event von select() auf dem Device, nachdem ich es schon ausgelesen habe?

7.e.Q
05-05-2006, 11:18
Gut, also mit der ersten Übertragung kommen die korrekten Daten. Nur die nachfolgenden fehlerhaften Events werde ich nicht los... select meint, vom INotify Device müssten noch Daten kommen, read blockiert aber... Warum?