Signal kurzzeitig deaktivieren?

12/04/2013 - 13:45 von Edzard Egberts | Report spam
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? Mit fcntl(m_Handle, NULL / F_NOTIFY) aus- und
wieder einschalten geht nicht und close(m_Handle) mit nachfolgender
kompletter Neuinitialisierung erscheint mir etwas grob.

BTW - was hat eigentlich SIGRTMIN zu bedeuten, was ich dazu finde,
verstehe ich nicht so recht.
 

Lesen sie die antworten

#1 Jochen Lübbers
12/04/2013 - 13:57 | Warnen spam
Edzard Egberts schrieb:

Kannst Du SIGRTMIN nicht für die Operation ignorieren?

Ungefàhr so (nur Prototype):

sighandler_t alterHandler = signal(SIGRTMIN, SIG_IGN);

<mach was>

(void) signal(SIGRTMIN, alterHandler);


HTH
Jochen
"Wer die Freiheit aufgibt, um Sicherheit zu gewinnen,
der wird am Ende beides verlieren"

Ähnliche fragen