Bonsoir je dois coder un algo de producteur consommateur j'ai fais ça :
Avant de voir le code j'explique ce que je fais :

donc je créé 3 processus un fils qui va écrire des entiers sur un fichier , un autre qui va lire un entier et le père qui initialise le fichier .
On doit utiliser des sémaphores :
une pour le contrôle d'accès au tampon
le nb de places libres
et le nb de places occupées

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
 
#include<unistd.h> // appel systeme fork
#include<fcntl.h> // appel system unix ES
#include<stdio.h> // librairie standard C
#include <sys/types.h>
#include <sys/sem.h> // semaphore IPC
#include <sys/ipc.h> // services IPC
 
key_t cle;
int semid;
FILE *f;
int article=0;
ushort init_sem[3]={1,10,0};
 
int lireFichier(char * pathname){
 
while(1){
struct sembuf op;
 
op.sem_num=2;op.sem_op=-1;op.sem_flg=0;
semop(semid,&op,1);
 
op.sem_num=0;op.sem_op=-1;op.sem_flg=0;
semop(semid,&op,1);
 
f=fopen(pathname,"a");
printf("%d",fgetc(f));
close(f);
 
op.sem_num=0;op.sem_op=1;op.sem_flg=0;
semop(semid,&op,1);
 
op.sem_num=1;op.sem_op=1;op.sem_flg=0;
semop(semid,&op,1);
}
 
}
 
void initFichier(char * pathname){
 
struct sembuf op;
 
op.sem_num=0;op.sem_op=-1;op.sem_flg=0;
semop(semid,&op,1);
 
f=fopen(pathname,"a");
fputc('0',f);
close(f);
 
op.sem_num=0;op.sem_op=1;op.sem_flg=0;
semop(semid,&op,1);
 
}
 
int ecrireFichier(char * pathname){
 
while(1){
 
struct sembuf op;
 
op.sem_num=1;op.sem_op=-1;op.sem_flg=0;
semop(semid,&op,1);
 
op.sem_num=0;op.sem_op=-1;op.sem_flg=0;
semop(semid,&op,1);
 
f=fopen(pathname,"a");
fputc(article,f);
article++;
close(f);
 
op.sem_num=0;op.sem_op=1;op.sem_flg=0;
semop(semid,&op,1);
 
op.sem_num=2;op.sem_op=1;op.sem_flg=0;
semop(semid,&op,1);
}
}
 
int main(int argc,char **argv){
 
int pid,i;
 
// creation d'une cle IPC en fonction du nom du programme
if ((cle=ftok(argv[0],'0')) == -1 ) {
fprintf(stderr,"Probleme sur ftoks\n");
exit(1);
}
 
// demande un ensemble de semaphore (ici un seul mutex)
if ((semid=semget(cle,3,IPC_CREAT|IPC_EXCL|0666))==-1) {
fprintf(stderr,"Probleme sur semget\n");
exit(2);
}
 
// initialise l'ensemble
if (semctl(semid,0,SETALL,init_sem)==-1) {
fprintf(stderr,"Probleme sur semctl SETALL\n");
exit(3);
}
 
for(i=0;i<2;i++){
 
pid=fork();
 
if(pid>0&&i==0){
printf("3");
int x;
for (x=0;x<2;x++){
int message;
pid=wait(&message);
}
//emctl(semid,0,IPC_RMID,0);
 
}else if(pid==0&&i==0){
printf("1");
ecrireFichier("test.test");
 
}else if(pid==0&&i==1){
printf("2");
lireFichier("test.test");
 
}
 
}
 
}

quand je lance ce code ma console ne m'achiffe rien quand je tire les while(1) des 2 fonctions j'ai les printf mais les while(1) j'en ai besoin de dans