Bonsoir,
Mon objectif c'est d'avoir deux processus père et fils, le premier produit et le second consomme, les deux boucle infiniment; l'utilisateur doit avoir un menu en faisant un (Ctl+c) et pour cela doit traiter ce signal avec cette partie du code:
avec ça j'ai remarqué que après le traitement du signal, j'ai eu un problème dans les sémaphore qui avant l'introduction du signal, tout marche bien; et les opérations sur les sémaphores j'ai 4 fonction:
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
38
39
40
41
42
43
44
45
46 #include <stdio.h> #include <malloc.h> #include <sys/stat.h> #include <sys/shm.h> #include <sys/sem.h> #include <sys/types.h> #include <sys/ipc.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <signal.h> sig_atomic_t sig_int=0; void handler_int() { sig_int=1; } int main() { struct sigaction sa,oldsa; memset(&sa, 0, sizeof(sa)); sa.sa_handler = &handler_int; sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; sigaction(SIGINT, &sa,&oldsa); int pidchil=fork() if(pidchild == 0) { while(1) { //consomation } } } while(!sig_int) { //production } //afficher le menu et lire le choix }
les deux premières sont:
et les deux autres :à la place de .sem_flg=0 j'ai met .sem_flg = SEM_UNDO
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 int snb_semaphore_wait (int semid) { struct sembuf operation[1]; operation[0].sem_num = 0; operation[0].sem_op = -1; operation[0].sem_flg = 0; return semop (semid, operation, 1); } int snb_semaphore_post (int semid) { struct sembuf operation[1]; operation[0].sem_num = 0; operation[0].sem_op = 1; operation[0].sem_flg = 0; return semop (semid, operation, 1); }
pour certain sémaphores j'ai appliqué les deux premières Operations et les deux autres pour le reste
Merci d'avance;
Partager