Per rendegli la vita più facile gli ho mostrato degli esempi e in
particolare volevo fare un programma che ridefinisce tutti i gestori
di segnali (tranne quelli non ridefinibili) su una funzione
"sig_handler", questa funzione sig_handler non deve fare altro che
dire "Sono il programma <PID> e mi è arrivato questo segnale:
<signum>".
Anche questo è molto facile, ma se io volessi stampare il nome del
segnale (per es. SIGUSR1) invece che il numero corrispondente?
Con uno switch funziona tutto:
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
void handle_signal(int signum) {
signal(signum, handle_signal);
switch (signum) {
case SIGHUP:
fprintf(stderr, "SIGHUP\n");
break;
case SIGQUIT:
fprintf(stderr, "SIGQUIT\n");
break;
/* non li scrivo tutti */
case SIGUSR1:
fprintf(stderr, "SIGUSR1\n");
break;
}
}
int main() {
signal(SIGHUP, handle_signal);
signal(SIGQUIT, handle_signal);
signal(SIGUSR1, handle_signal);
while (1) {sleep(5);}
return 0;
}
Ma il problema è che non è particolarmente bello fare un case per ogni
segnale anche in termini di riusabilità...
Mi chiedevo se c'era un modo per risalire a SIGXXX dato il numero
corrispondente.
Grazie
Non � pi� bello fare un enum di char ?
--
M.B.
Premesso che in generale la soluzione di tetsuya � di gran lunga la pi�
comoda, nel caso specifico esiste strsignal() in string.h
La manpage di linux dice che � posix 2008, ma anche presente su solaris
e bsd, per cui credo che la disponibilit� non sia un problema - e al
massimo, la si scrive...
> Se i segnali sono mappati su numeri che partono da 0 o 1 e sono
> consecutivi (come immagino che sia), puoi fare un array di stringhe:
[...]
Io sconsiglio vivamente di usare la tua soluzione. Quelle costanti sono
definite tali proprio per non fare affidamento su dei literal che
potrebbero cambiare nel tempo (nessuno vieta agli implementatori di
rinumerare le costanti). Per quanto meno elegante possa sembrare, � di
gran lunga meglio lo switch.
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ab...@newsland.it