So kann jemand erklären, was dies tun soll:C Erklärung von Standard-Signalbibliothek
void (*signal(int sig, void (*func)(int))) (int);
Es ist eine Definition aus der Standard-Signalbibliothek entnommen ist.
So kann jemand erklären, was dies tun soll:C Erklärung von Standard-Signalbibliothek
void (*signal(int sig, void (*func)(int))) (int);
Es ist eine Definition aus der Standard-Signalbibliothek entnommen ist.
beginnen mit dem Namen:
signal
Gehen Sie rechts so weit wie möglich:
signal(int sig, void (*func)(int))
Sie haben eine geklammerten Liste von Parametern, so dass es eine Funktion unter 2 Parameter ist: ein int
benannt sig
und ein Funktionszeiger namens func
(Sie können es später auf die gleiche Weise analysieren).
Dann treffen Sie eine andere rightparen, so dass Sie links gehen:
*signal(int sig, void (*func)(int))
So ist die Funktion signal
einen Zeiger auf ... etwas zurückgibt. Lassen Sie uns nehmen Sie die Klammer nach unten und gehen wieder nach rechts, da können wir:
(*signal(int sig, void (*func)(int))) (int)
Wir haben wieder eine geklammerten Liste von Argumenten, so signal
einen Zeiger zurück zu Funktion, die eine int
als einziges Argument.Dann wieder nach links:
void (*signal(int sig, void (*func)(int))) (int)
So ist die Funktion signal
die Zeiger wieder in Funktion int
nehmen und wiederkehr void
.
Ja, diese Sprache ist seltsam, aber zumindest ist es konsistent. :)
Die Funktion signal
nimmt als Argumente:
int sig - a signal value
void (*func)(int) - a pointer to a function that takes an int and returns void
und kehrt:
void (*)(int) - a function that takes an int and returns void
signal
registriert eine Funktion, die aufgerufen werden, wenn das Signal auftritt, und gibt die vorherige Funktion Handler.
Der Mann Seite macht diese Erklärung einfacher durch die Einführung eines typedef
zu verstehen:
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
sighandler_t
wird definiert als ein Zeiger auf eine Funktion, die eine int
akzeptiert und gibt void
.
signal
ist eine Funktion, die eine int
(Signalnummer) und einen Funktionszeiger akzeptiert und einen Funktionszeiger zurückgibt.
Grundsätzlich erlaubt es zu entscheiden, wie ein spezifisches Signal (identifiziert durch das Argument int sig
) behandelt wird, das an Ihr Programm gesendet wird.
Die void (*func)(int)
ein Zeiger auf die Funktion ist, die das Signal behandelt (Sie können einen benutzerdefinierten eine oder SIG_DFL
SIG_IGN
verwenden bereitzustellen, die Standardaktionen es normalerweise zu verwalten oder zu ignorieren). Die Funktion signal
gibt dann den Zeiger auf den aktuellen Handler zurück VOR dem Aufruf dieser Funktion oder SIG_ERR
ist ein Fehler aufgetreten Dies kann verwendet werden, um den Standard-Handler in letzter Zeit wiederherzustellen, wenn Sie mit benutzerdefiniertem Verhalten fertig sind.