Alors quelqu'un peut-il expliquer ce que cela est censé faire:déclaration C à partir du signal bibliothèque standard
void (*signal(int sig, void (*func)(int))) (int);
Il est une définition tirée de la bibliothèque de signaux standard.
Alors quelqu'un peut-il expliquer ce que cela est censé faire:déclaration C à partir du signal bibliothèque standard
void (*signal(int sig, void (*func)(int))) (int);
Il est une définition tirée de la bibliothèque de signaux standard.
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. :)
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.
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.
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_DFL
SIG_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é.