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:

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
 
}
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:
les deux premières sont:

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);
}
et les deux autres :à la place de .sem_flg=0 j'ai met .sem_flg = SEM_UNDO

pour certain sémaphores j'ai appliqué les deux premières Operations et les deux autres pour le reste
Merci d'avance;