Listing 5.1: Definiowanie reakcji procesu na sygnał (str. 37)
#include <signal.h>
void f(int sig_num){
printf("Przechwycenie syg. nr %d\n", sig_num);
}
main(){
printf("Domyslna obsluga sygnalu\n");
signal(SIGINT, SIG_DFL);
sleep(5);
printf("Ignorowanie sygnalu\n");
signal(SIGINT, SIG_IGN);
sleep(5);
printf("Przechwytywanie sygnalu\n");
signal(SIGINT, f);
sleep(5);
}
Listing 5.2: Blokowanie sygnałów (str. 38)
#include <signal.h>
#include <stdio.h>
void f(int sig_num){
printf("Przechwycenie sygnalu nr %d\n", sig_num);
}
main(){
sigset_t zbior;
sigfillset(&zbior);
sigprocmask(SIG_BLOCK, &zbior, NULL);
signal(SIGINT, f);
printf("Oczekiwanie na sygnaly\n");
sleep(10);
sigprocmask(SIG_UNBLOCK, &zbior, NULL);
printf("Koniec\n");
}
Listing 5.3: Odczyt zgłoszonych sygnałów (str. 39)
#include <signal.h>
#include <stdio.h>
main(){
sigset_t zbior, zbior2;
sigfillset(&zbior);
sigprocmask(SIG_BLOCK, &zbior, NULL);
printf("Oczekiwanie na sygnaly\n");
sleep(10);
sigpending(&zbior2);
switch ( sigismember(&zbior2, SIGINT) ){
case -1:
perror("sigismember");
break;
case 0:
printf("Nie odebrano sygnalu SIGINT\n");
break;
case 1:
printf("Odebrano sygnal SIGINT\n");
}
sigprocmask(SIG_UNBLOCK, &zbior, NULL);
printf("Koniec\n");
}
Listing 5.4: Zawieszenie procesu w oczekiwaniu na sygnał (str. 40)
#include <signal.h>
main(){
sigset_t maska;
sigemptyset(&maska);
sigaddset(&maska, SIGINT);
sigaddset(&maska, SIGTERM);
printf("Oczekiwanie na sygnal\n");
sigsuspend(&maska);
}