Bonjour,
Je bloque sur la création d'une fonction. L'objectif est de créer une fonction qui va lire des nombres sur le descripteur tube et les comparer à val. Ces nombres sont envoyés par des processus fils. Si le nombre lu est supérieur (respectivement inférieur) à val alors le signal SIGUSR1 (respectivement SIGUSR2) est envoyé au processus fils qui a écrit cette valeur. Sinon (les deux valeurs sont égales), c’est le signal SIGTERM qui est envoyé au processus fils correspondant et les valeurs suivantes lues sur tube provoqueront systématiquement l’envoi du signal SIGTERM aux processus à l’origine de ces valeurs. La fonction retourne le pid du vainqueur lorsqu’il n’y a plus rien à lire sur tube.
J'ai commencé à écrire mais je bloque sur la façon d'envoyer les signaux au bon processus fils (grâce à son pid). De plus, j'ai un doute sur la lecture dans le tube.
Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
33
34
35
36
37 pid_t lecture(int val, int tube) { int valeur_lue; int pid_gagnant; // Bloque les signaux SIGUSR1, SIGUSR2 et SIGTERM pendant la lecture dans le tube sigset_t masque; sigemptyset(&masque); sigaddset(&masque, SIGUSR1); sigaddset(&masque, SIGUSR2); sigaddset(&masque, SIGTERM); sigprocmask(SIG_BLOCK, &masque, NULL); // Pb : lire les valeurs dans le tube et connaître le pid du fils qui écrit // chaque valeur while (read(tube, &valeur_lue, sizeof(int) > 1)) { // On compare if (valeur_lue > val) { // Ici, comment trouver le bon pid ? kill (pid_du_fils_qui_a_ecrit, SIGUSR1); } else if (valeur_lue < val) { kill (pid_du_fils_qui_a_ecrit, SIGUSR2); } else { kill (pid_du_fils_qui_a_ecrit, SIGTERM); } } sigprocmask(SIG_UNBLOCK, &masque, NULL); // Débloque les signaux SIGUSR1, SIGUSR2 et SIGTERM return pid_gagnant; }
Partager