2010-12-02 15 views

Antwort

3

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. :)

4

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.

0

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.

1

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_DFLSIG_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.