Edzard Egberts <
ed...@tantec.de> writes:
> Folgender Code dient der �berwachung eines Verzeichnisses auf
> ge�nderte Dateien:
>
> struct sigaction act;
> act.sa_sigaction = scb_Auto_Dir; // statische Callback-Funktion
> sigemptyset(&act.sa_mask);
> act.sa_flags = SA_SIGINFO;
> sigaction(SIGRTMIN, &act, NULL);
> m_Handle = open(m_Dir_Cfg.c_str(), O_RDONLY);
> if (m_Handle > -1)
> {
> fcntl(m_Handle, F_SETSIG, SIGRTMIN);
> fcntl(m_Handle, F_NOTIFY, DN_MODIFY|DN_MULTISHOT);
> }
>
> Das funktioniert einwandfrei, aber wenn das Programm eine Datei
> schreibt, wirft das mehrere Signale, die nur st�ren. Deshalb m�chte
> ich f�r das Schreiben einer Datei dieses Signal kurzzeitig abschalten
> - wie geht das am Elegantesten?
Ueberhaupt nicht. Waehrend die Datei geschrieben wird, koennte 'etwas
anderes' in dem Verzeichnis geaendert werden und dafuer gaebe es dann
keine Benachrichtigung. Du koenntest die Datei in einem
Unterverzeichnis erstellen und danach via rename in das eigentliche
Verzeichnis bewegen.
[...]
> BTW - was hat eigentlich SIGRTMIN zu bedeuten, was ich dazu finde,
> verstehe ich nicht so recht.
Das steht fuer das Echtzeitsignal mit der kleinsten
Signalnummer. Echtzeitsignale sind fuer Anwendungen reserviert (NB: das
umfasst alles ausser dem Kernel, also auch die C library) und sie
haben, im Gegensatz zu normalen Signalen, keine 'Flaggensemantik', dh
falls ein Echzeitsignal mehrfach an einen Prozess geschickt wird,
empfaengt dieser auch mehrere Echtzeitsignale.