Archiv verlassen und diese Seite im Standarddesign anzeigen : Verzeichnis auf Schreibaktivitäten überwachen
axeljaeger
12-04-2003, 20:26
Es gibt doch sicher irgendeine Kernelfunktion, von der man benachrichtigt wird, das in einem Verzeichnis Schreibaktivitäten durchgeführt wurden, wenn man vorher um eine solche Benachrichtigung gebeten hat. Die Boardsuche hat leider nichts gefunden zum Thema "Verzeichnis überwachen"
Hallo,
so eine Funktion gibts so mal nicht im kernel.
Entweder man pollt und benutzt stat() dafür, oder
du schaust dir mal FAM an.
http://oss.sgi.com/projects/fam/
gruß
Hans-Georg Normann
12-04-2003, 22:04
axeljaeger, was hast du denn für ein Pob? Benötigst du Benachrichtigung a) sofort, b) jede halbe Stunde oder c) einmal am Tag eine Übersicht?
zu a:
Mir fällt so direkt nichts ein, vielleicht ne Datenbank oder etwas. Oder mir schwebt so etwas wie .htaccess vor, habe aber sonst keinen Plan
zu b und c:
würde ich über cron und find lösen. In find kann man wunderbar nach diversen Datumversionen (Änderungs-, Zugriffszeit, etc) abgrenzen.
Hans
anda_skoa
12-04-2003, 23:02
Hier im Forum gibts noch nichts dazu.
Ich glaube du suchst sowas wie FAM
http://oss.sgi.com/projects/fam/faq.html
Möglicherweise gibts es auch was ähnliches in neueren Linux Kernel.
Ciao,
_
axeljaeger
13-04-2003, 19:51
Nein, ich brauche die Benachrichtigung möglichst sofort, weil ich mal was machen will, mit dem ich richtig angeben kann: Ich will ein Plugin in ein Verzeichnis kopieren und die laufende App soll das sofort mitkriegen. Sozusagen Hot-Plugging für Plugins. Genauso soll es auch mit dem löschen von Plugins gehen. Der User kriegt dann ein kleines Fenster "New plugin detected", bzw "Unloading plugin"
Ich hab mir jetzt fam besorgt und musste zu meiner Überraschung feststellen, das im Kernel keinen
Support für imon habe (Mandrake 8.2). Jetzt versuche ich gerade das Beispielprogramm zu verstehen,
dabei ist mir was aufgefallen, was ich merkwürdig finde:
void handle_int(int)
{
printf("Interupted!\n");
signal(SIGINT, handle_int); // <-- Das gibt doch eine Rekursion?
intr = true;
}
Hallo,
ist keine Rekursion.
Bei machen Unixen und älteren linux und libc Versionen
wird beim ersten Aufruf des mit signal() installierten Sighandlers
der Handler wieder auf seinen Default gebracht.
Deshalb installiert der Autor wieder
den Sighandler in der Sighandlerfunktion.
signal(SIGINT, handle_int);
gruß
axeljaeger
14-04-2003, 17:04
Und ich kann auch bei neueren Kernels nicht in Gefahr laufen, einen Signalhandler zweimal mit einem Signal zu verbinden? Und noch ne Frage: Warum verwendet SGI signal() und nicht sigaction()?
hallo,
es gilt immer der zuletzt gesestze Signalhandler.
Ist ja ein Funktionzeiger der dann sozusagen "ausgetauscht" wird.
also wenn Signal() z.b nacheinander so aufruft:
signal(SIGINT,handle_1);
signal(SIGINT,handle_2);
signal(SiGINT;handle_3);
dann gilt handle_3.
Warum SGI jetzt kein sigaction() verwendet kann ich auch nicht sagen.
Wahrscheinlich ist das angenehmer zu programmieren.
SIGINT Ist ja "Interrupt from Keyboard"
also wenn STRG-C betätigt wird.
Da braucht man jetzt nicht unbedingt sigaction zu verwenden (IMO).
gruß
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.