2010-12-12 10 views
6

Also versuche ich ein C-Programm schreiben, das inotify verwendet. Ich habe pynotify benutzt, also verstehe ich, wie es funktioniert. Jedoch folge ich einem Führer und es sagt mir, <linux/inotify.h> einzuschließen. Das Problem ist, dass dieser Header nur Makrodefinitionen hat, nicht die Funktionsprototypen. Es sieht so aus, als wären die Funktionen in <sys/inotify.h> prototypisiert.inotify C-Header

Meine Frage ist, was ist der Unterschied zwischen linux/inotify.h und sys/inotify.h? Warum gibt es beides?

Antwort

7

sys/inotify.h ist Teil der GNU C library. Es stellt die Strukturen und Funktionen zur Verfügung, die Ihr Programm verwendet, um Benachrichtigungen über Dateisystemänderungen zu erhalten. Es kann als das öffentliche API des Benachrichtigungssystems betrachtet werden.

linux/inotify.h ist Teil des Linux-Kernels. Es definiert die Kernel-Strukturen und -Konstanten, die zur Implementierung des Benachrichtigungssystems selbst verwendet werden. Sie sollten diese Datei nicht einschließen, es sei denn, Sie schreiben etwas wie ein Kernel-Modul, weil es Linux-spezifisch und daher nicht portabel ist.

+0

sys/inotify.h gehört nicht zur Standardbibliothek! (Es ist jedoch Teil der Bibliotheken, die typischerweise auf einer Linux-Box verfügbar sind) –

+0

@Billy, meine 'sys/inotify.h' sagt' Diese Datei ist Teil der GNU C-Bibliothek', ganz oben in der Datei, und Mein Paketmanager sagt, dass es von 'glibc' installiert wurde. Was sagt dein? –

+2

@ Frédéric: GNU C-Bibliothek! = Standardbibliothek. Standardbibliothek == "ISO/IEC 9899: 1990" oder "ISO/IEC 9899: 1999". –

Verwandte Themen