Entonces, ¿puede alguien explicar lo que esto se supone que debe hacer:declaración de C Biblioteca señal estándar
void (*signal(int sig, void (*func)(int))) (int);
Es una definición tomada de la biblioteca de señal estándar.
Entonces, ¿puede alguien explicar lo que esto se supone que debe hacer:declaración de C Biblioteca señal estándar
void (*signal(int sig, void (*func)(int))) (int);
Es una definición tomada de la biblioteca de señal estándar.
de inicio con el nombre:
signal
Ir a la derecha en la medida de lo que pueda:
signal(int sig, void (*func)(int))
Usted tiene una lista entre paréntesis de los parámetros, por lo que es una función de tomar 2 parámetros: un int
llamado sig
y un puntero a la función llamado func
(puede analizarlo de la misma manera más adelante).
A continuación, golpeó a otro rightparen, por lo que ir a la izquierda:
*signal(int sig, void (*func)(int))
Por lo tanto la función signal
devuelve un puntero a ... algo. Vamos a acabar con los paréntesis y vaya a la derecha de nuevo, ya que pueden:
(*signal(int sig, void (*func)(int))) (int)
Tenemos de nuevo una lista entre paréntesis de argumentos, por lo signal
devuelve un puntero a la función que toma un int
como un único argumento.A continuación, vaya a la izquierda de nuevo:
void (*signal(int sig, void (*func)(int))) (int)
Así, la función signal
devuelve el puntero a la función de tomar y devolver int
void
.
Sí, este lenguaje es raro, pero al menos es consistente. :)
La función signal
toma como argumentos:
int sig - a signal value
void (*func)(int) - a pointer to a function that takes an int and returns void
y devuelve:
void (*)(int) - a function that takes an int and returns void
signal
registra una función a ser llamada cuando se produce la señal y devuelve el manejador de la función anterior.
La página del manual hace esta declaración más fácil de entender mediante la introducción de un typedef
como:
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
sighandler_t
se define como un puntero a una función que acepta un int
y devuelve void
.
signal
es una función que acepta un int
(número de señal) y un puntero de función y devuelve un puntero a la función.
Básicamente, permite decidir cómo manejar una señal específica (identificada por el argumento int sig
) enviada a su programa.
El void (*func)(int)
es un puntero a la función que se encargará de la señal (puede proporcionar una personalizada o utilizar SIG_DFL
SIG_IGN
cuales son acciones predeterminadas para gestionar normalmente o ignorarla).
La función signal
devuelve el puntero al controlador presente ANTES de la llamada de esta función o SIG_ERR
es un error. Esto se puede utilizar para restaurar el controlador predeterminado últimamente cuando haya terminado con el comportamiento personalizado.