2010-12-02 20 views

Répondre

3

Démarrer avec le nom:

signal 

Go droit aussi loin que vous pouvez:

signal(int sig, void (*func)(int)) 

Vous avez une liste parenthésée des paramètres, il est donc une fonction qui prend 2 paramètres: un int nommé sig et un pointeur de fonction nommé func (vous pouvez l'analyser de la même manière plus tard).

Ensuite, vous a frappé un autre rightparen, vous allez à gauche:

*signal(int sig, void (*func)(int)) 

donc la fonction signal renvoie un pointeur sur ... quelque chose. Prenons bas la parenthèse et aller à droite, puisque nous pouvons:

(*signal(int sig, void (*func)(int))) (int) 

Nous avons encore une liste d'arguments entre parenthèses, donc signal renvoie un pointeur de fonction qui prend une int comme un seul argument.Ensuite, allez encore à gauche:

void (*signal(int sig, void (*func)(int))) (int) 

Ainsi la fonction signal renvoie le pointeur à la fonction prise int et retour void. Oui, ce langage est bizarre, mais au moins c'est cohérent. :)

4

La fonction prend comme arguments signal:

int sig - a signal value 
void (*func)(int) - a pointer to a function that takes an int and returns void 

et retourne:

void (*)(int) - a function that takes an int and returns void 

signal enregistre une fonction à appeler lorsque le signal se produit et renvoie le gestionnaire de la fonction précédente.

0

La page de manuel fait cette déclaration plus facile à comprendre par l'introduction d'un typedef comme:

typedef void (*sighandler_t)(int); 

sighandler_t signal(int signum, sighandler_t handler); 

sighandler_t est défini comme un pointeur vers une fonction qui accepte un int et retourne void.

signal est une fonction qui accepte un int (numéro de signal) et un pointeur de fonction et renvoie un pointeur de fonction.

1

Fondamentalement, il permet de décider comment gérer un signal spécifique (identifié par l'argument int sig) envoyé à votre programme.

Le void (*func)(int) est un pointeur vers la fonction qui gère le signal (vous pouvez fournir une coutume ou utilisez SIG_DFLSIG_IGN qui sont des actions par défaut pour le gérer normalement ou de l'ignorer). La fonction signal renvoie ensuite le pointeur vers le gestionnaire présent AVANT l'appel de cette fonction ou SIG_ERR est une erreur Cela peut être utilisé pour restaurer le gestionnaire par défaut récemment lorsque vous avez terminé avec un comportement personnalisé.