2009-05-18 7 views
2

Ich versuche, iNotify in Linux Rhel5, Kernel 2.6.18, Glibc 2.5-18 zu verwenden. Ich habe das Ereignis nicht als einen Schuss definiert, aber aus irgendeinem Grund verhält es sich so, als hätte ich es getan. Der Effekt ist, dass ich nach jedem Ereignis eine Uhr neu hinzufügen muss. Hat jemand jemals iNotify benutzt? Ein weiteres Problem besteht darin, dass die im Ereignisobjekt zurückgegebene Maske nur ein Flag enthält: IN_ONE_SHOT.Linux iNotify One Shot und Event-Maske Problem

+0

Können Sie ein kleines Stück Code zeigen? – Duck

+0

Versuchen Sie strace. Das ist eine gute Möglichkeit, zu überprüfen, ob der Code die erwarteten Systemaufrufe erzeugt. –

Antwort

0

Schreiben Sie das kleinste Beispiel und testen Sie es. Wenn es das Verhalten zeigt, über das du sprichst, dann füge es deiner Frage hinzu. Wenn es sich normal verhält, fügen Sie etwas mehr Code hinzu und testen Sie es erneut. Wiederholen Sie den Vorgang, bis Sie den Fehler reproduziert haben oder Ihr Code funktioniert. Oft finde ich, dass mir das Bauen eines Spielzeugprogramms genau das sagt, was ich falsch mache, was ich in einem größeren Programm nicht sehen konnte.

0

Es ist wahrscheinlich, dass inotify die Uhr implizit löscht, weil die Datei gelöscht wird. Auf das Verhalten wird subtil mit the manual page verwiesen (siehe Abschnitt zum Ereignis IN_IGNORED). Sie können überprüfen, ob dies der Fall ist, indem Sie überprüfen, ob das Flag IN_IGNORED in dem inotify_event gesetzt ist, der von Ihrem Aufruf an read ausgefüllt wurde.

Siehe auch inotify delete_self when modifying and saving a file für warum die Datei gelöscht werden kann ohne Ihr Wissen oder Ihre Aktion während Ihrer Meinung nach nur eine Änderung ist.