Salut,
voici un exemple simple d'utilisation de signaux.
Tu lances le chronomètre, l'alarm étant d'une seconde, le signal SIGALRM est lancé toute les secondes, on l'intercepte donc (signal numéro 14) et lance la fonction
seconde à chaque fois que le signal est intercepté.
Si on tape CTRL+C, on lance le signal SIGINT (numéro 2) et lance la fonction qui permet d'afficher le nombre de secondes écoulées.
Pour quitter le chronomètre, il faut envoyer le SIGQUIT qui peut être émis grâce à la combinaison CTRL+\
C'est un petit programme simple mais qui explique bien le fonctionnement global des signaux.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
static int nb_sec= 0;
void seconde() {
printf("coucou\n");
nb_sec += 1;
alarm(1); // On relance l'alarme
}
void interrupt() {
printf("%d secondes écoulées\n", nb_sec);
}
void arret() {
printf("%d secondes écoulées\n", nb_sec);
printf("Fin du chronomètre\n");
exit(1);
}
int main() {
printf("Début du processus n°%d\n", getpid());
alarm(1);
signal(14, seconde); // Signal quand ALARM est écoulé
signal(2, interrupt); // Signal CTRL+C , affiche le nombre de secondes
signal(3, arret); // Signal CTRL+\ , affiche le nombre de secondes écoulées et quitte
while(1); // Permet l'émission de l'ALARM
} |
Partager