Was ist der richtige Weg, um eine einzelne Signal Handler-Funktion für mehrere Signale zu haben?

8

Was ist der beste Weg in C unter Linux, ein Programm einzurichten, das mehrere POSIX-Signale mit derselben Funktion verarbeiten kann?

Zum Beispiel habe ich in meinem Code eine Handler-Funktion, die ich generisch aufrufen möchte, wenn ein Signal abgefangen wird, um einige Aktionen auszuführen:

%Vor%

Ich habe zwei Signale zum Auffangen eingerichtet, indem ich für jedes Signal individuelle Signalaufrufe habe:

%Vor%

Ist dies der richtige Weg, um diese Art der Handhabung einzurichten? Gibt es einen anderen Weg, wo ich nicht alle möglichen Signalnummern aufzählen muss?

    
ammianus 24.10.2010, 16:20
quelle

3 Antworten

3

Ich kann nicht sehen, wie Sie einfach einen einzigen Handler für alle Signale setzen können. Sie können jedoch schließen, indem Sie sigfillset() verwenden Generiere ein Set, das alle gültigen Signalnummern enthält, und iteriere dann über mögliche Signalnummern mit sigismember() um festzustellen, ob diese Nummer in der Menge enthalten ist, und wenn ja, einen Handler zu setzen. OK, ich kann keine Methode zur Bestimmung der maximal möglichen Signalnummer sehen, daher müssen Sie möglicherweise einen geeigneten Maximalwert erraten.

    
Tim 24.10.2010, 17:10
quelle
3

"signum" Parameter von "sigaction" Systemaufruf ist ein ganzzahliger Wert, der nicht als Flag funktioniert.

Soweit ich weiß, gibt es keine Möglichkeit, in einem Aufruf eine Handler-Funktion für mehrere Signale zuzuweisen.

    
Kel 24.10.2010 16:37
quelle
1
  

Ist dies der richtige Weg, um diese Art der Behandlung einzurichten?

Nicht ganz - es ist nicht sicher, printf() zu verwenden innerhalb eines Signalhandlers , aber Sie können weiterhin write() bis stdout oder stderr verwenden.

    
Dan Yard 25.06.2017 00:26
quelle

Tags und Links