PDA

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"

pik7
12-04-2003, 20:48
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;
}

pik7
13-04-2003, 21:07
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()?

pik7
14-04-2003, 17:40
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ß