Mit fsnotify werden die Dateisystembenachrichtigungen von Linux, Windows, macOS, BSD und illumos in eine einheitliche Go-Schnittstelle integriert. Die Bibliothek reagiert auf Änderungen in Dateien und Verzeichnissen und bindet sich effizient in bestehende Anwendungen ein.
Benachrichtigungssystem für Dateisystemereignisse: fsnotify.
(Bild: Midjourney / KI-generiert)
Die Go-Bibliothek fsnotify liefert ein plattformübergreifendes Benachrichtigungssystem für Dateisystemereignisse unter Linux, Windows, macOS, BSD und illumos. Der Code nutzt die nativen Mechanismen der Betriebssysteme und verbindet inotify auf Linux, kqueue auf BSD und macOS, ReadDirectoryChangesW auf Windows sowie FEN auf illumos zu einer einheitlichen Schnittstelle.
Architektur
Die Architektur basiert auf einem Watcher-Objekt, das Pfade registriert und Ereignisse über einen Kanal bereitstellt. Jede Registrierung erzeugt intern eine Überwachung des angegebenen Verzeichnisses oder der Datei. Ein Watcher verarbeitet die Ereignisse Create, Write, Remove, Rename und Chmod. Die Operationen liegen als Bitmaske vor, sodass ein einzelnes Ereignis mehrere Flags enthalten kann.
Der Methodenaufruf „Event.Has“ prüft die gesetzten Bits und bietet eine effiziente Auswertung. Alle Ereignisse und Fehler gelangen über separate Kanäle an die Anwendung. Das Modell setzt eine aktive Verarbeitung in einer eigenen Go-Routine voraus, weil blockierende Lesevorgänge auf dem Hauptthread dazu führen würden, dass keine weiteren Operationen ausgeführt werden.
fsnotify unter Linux, BSD und macOS nutzen
Unter Linux greifen alle Funktionen auf inotify zu. Das Verhalten bei Löschoperationen folgt dem Kernelmodell. Ein Entfernen führt zunächst zu einem Chmod-Signal, weil der Kernel die Verknüpfung zum Inode reduziert. Erst wenn alle offenen Dateideskriptoren geschlossen sind, liefert inotify ein Remove-Ereignis. Administratoren konfigurieren die Grenzwerte für „max_user_watches“ und „max_user_instances“ über „sysctl“ oder die Dateien in „/proc“. Zu kleine Werte lösen Fehlermeldungen wie „no space left on device“ oder „too many open files“ aus. Für umfangreiche Überwachungsumgebungen ist daher eine Anpassung sinnvoll.
Auf macOS und BSD basiert fsnotify auf kqueue. Die Implementierung öffnet für jede Datei einen eigenen Deskriptor. Dadurch erreicht das System die Obergrenze offener Dateien schneller als unter Linux. Die Parameter „kern.maxfiles“ und „kern.maxfilesperproc“ steuern die Limits. Eine Überwachung umfangreicher Verzeichnisstrukturen führt ohne Anpassung der Limits zu Engpässen.
Windows mit fsnotify
Unter Windows nutzt die Bibliothek ReadDirectoryChangesW. Das System arbeitet mit einem Benutzerpuffer, dessen Standardgröße bei 64 Kilobyte liegt. Die Option „WithBufferSize“ erweitert diesen Puffer und reduziert das Risiko eines Pufferüberlaufs. Ein solcher Überlauf führt zu „ErrEventOverflow“. „Forward Slashes“ in Pfadangaben verarbeitet Windows zwar korrekt, allerdings senden SMB-Shares bei hoher Last unter Umständen unvollständige Ereignisfolgen. Werden überwachte Ordner entfernt, ist die Ereignislieferung für untergeordnete Elemente nicht garantiert.
Die Überwachung einzelner Dateien führt oft zu inkonsistenten Ergebnissen. Texteditoren und Build-Werkzeuge speichern Änderungen häufig über temporäre Dateien, die anschließend atomar ersetzt werden. Dadurch verliert der Watcher den Bezug zum ursprünglichen Objekt. Die Beobachtung des übergeordneten Verzeichnisses gilt daher als zuverlässigere Methode. Das Filtern der relevanten Dateien erfolgt über „Event.Name“.
Überwachung von NFS, SMB, FUSE sowie virtuellen Dateisystemen
fsnotify unterstützt keine Überwachung von NFS, SMB, FUSE sowie virtuellen Dateisystemen wie /proc oder /sys, weil die Protokolle keine Benachrichtigungen auf Dateisystemebene übermitteln. Der zusätzliche Debug-Modus liefert bei aktivierter Umgebungsvariable „FSNOTIFY_DEBUG“ eine Ausgabe der Rohereignisse ohne weitere Aufbereitung. Die Funktion erleichtert die Analyse komplexer Situationen und liefert genaue Codes und Zeitstempel.
Die Implementierung umfasst weitere Funktionen wie „NewBufferedWatcher“, „Remove“ und „WatchList“. Ein gepufferter Watcher eignet sich für Umgebungen mit sehr hoher Ereignisrate, in denen die Kernelpuffer nicht erweitert werden können. „WatchList“ liefert eine Übersicht aller registrierten Pfade. „Remove“ löst eine einzelne Überwachung und gibt „ErrNonExistentWatch“ zurück, wenn der Pfad nicht registriert wurde.
Die Bibliothek verwendet intern optimierte Backend-Implementierungen, die in separaten Quelldateien für die jeweiligen Plattformen abgelegt sind. Zusätzliche Helferfunktionen wie „IgnoringEINTR“ sichern die korrekte Verarbeitung von Systemaufrufen ab. Der Quellcode zeigt eine klare Trennung zwischen plattformspezifischem Verhalten und gemeinsam genutzter Logik.
Stand: 08.12.2025
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel IT-Medien GmbH, Max-Josef-Metzger-Straße 21, 86157 Augsburg, einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von Newslettern und Werbung nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung.
Aktuelles eBook
Storage-Software als Effizienzbooster
eBook „Storage-Software als Effizienzbooster“
(Bild: Storage-Insider)
Mit der geeigneten Storage-Software kann sich ein Unternehmen einen Effizienzbooster ins Haus holen oder in der Cloud abonnieren. Dieser Booster steigert nicht nur die Performance der geschäftskritischen Anwendungen, sondern optimiert auch die Kosten der bereits installierten Speichersysteme.
Die Themen im Überblick:
Herausforderungen eines modernen Speichersystems
Methoden und Technologien effizienter Speichersysteme
Effizienter Speicher mit Pure Storage, AWS, Cohesity und Dell