Ich möchte benachrichtigt werden, wenn ein bestimmter Dateiname erstellt wird. Ich schaue inotify
. Das IN_CREATE
Flag ist verfügbar, um ein Verzeichnis auf Änderungen zu überwachen. Ich würde es jedoch vorziehen, nicht das gesamte Verzeichnis zu überwachen, da in diesem Verzeichnis neben der Datei, an der ich interessiert bin, möglicherweise viele Aktivitäten stattfinden. Kann dies durchgeführt werden? ?
9
access
mit aufrufen,F_OK
um festzustellen, ob es noch vorhanden ist.Antworten:
Der Kernel kann Sie nicht nur über eine Änderung eines bestimmten Pfads informieren. Die Gründe sind etwas subtil:
Unter Linux existiert ein Dateiobjekt unabhängig von den Namen, die es möglicherweise hat. Dateinamen sind tatsächlich Attribute ihres enthaltenen Verzeichnisses, und eine einzelne Datei kann mit mehreren Namen aufgerufen werden (siehe Hardlinking).
Der Kernel muss etwas haben, an das er inotify-Objekte anhängen kann. Es kann kein Objekt an einen Pfadnamen anhängen, da ein Pfadname kein echtes Dateisystemobjekt ist. Sie müssen eine Verbindung zum übergeordneten Verzeichnis oder zur Datei herstellen, die im Pfad beschrieben wird. Sie können jedoch keine Anhänge an die Datei anhängen, da Sie beobachten, ob eine Datei mit einem bestimmten Namen erstellt wird und keine Änderungen an einer bestimmten Datei vorgenommen werden.
Theoretisch könnte der Kernel eine API implementieren, mit der Sie Ereignisse für einen bestimmten Pfadnamen auswählen können, wenn Sie einem Verzeichnis eine Überwachung hinzufügen, ähnlich wie Sie Ereignistypen auswählen können. Dies würde die API aufblähen und der Kernel würde am Ende dieselben Daten verarbeiten und denselben Zeichenfolgenvergleich durchführen, den Sie im Userspace durchführen würden.
Gibt es einen spürbaren Leistungseinbruch beim Platzieren einer Uhr in einem sehr aktiven Verzeichnis? Ich bin mir nicht sicher, wie aktiv du meinst. Dutzende Dateien pro Sekunde, Hunderte, Millionen?
Auf jeden Fall würde ich vermeiden
access
: Es wird immer rassig. Zwischen den Aufrufen vonaccess
kann eine Datei erstellt und entfernt werden , und das Aufrufenaccess
in einer sehr engen Schleife wird langsam sein und ist die Art von Problem,inotify
die gelöst werden soll.quelle
inotify
haben und ob die Leistung ein tatsächliches Problem war.