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
| #include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int test;
key_t cle;
int semid;
struct sembuf op;
int num_proc=1,nb_proc;
int main(int argc, char **argv)
{
cle=ftok("test",'a');
semid = semget(cle, 1, IPC_CREAT | IPC_EXCL | 0666);
if(!semctl(semid, 0,SETVAL, 1)) printf("erreur initialisation sémaphore\n");
int pid;
printf("saisir le nombre de joueur d'une equippe:\n");
scanf("%d",&nb_proc);
nb_proc*=2;
do {
pid = fork();
if (pid!=0) {
num_proc++;
//test=semctl(semid, 0, IPC_RMID, 0); //Destruction du sémaphore
//if(!test) printf("erreur semctl!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
}
else if (pid==0) {
op.sem_num = 0;
op.sem_op = -1;
op.sem_flg = 0;
test=semop(semid, &op, 1);
if(!test) printf("erreur semop!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
sleep(2);
printf("\nje suis le processus du pid:%d \n",getpid());
op.sem_op = 1;
op.sem_num = 0;
op.sem_flg = 0;
test=semop(semid, &op, 1);
if(!test) printf("erreur semop!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
}
} while ((pid!=0) && (num_proc<=nb_proc));//pid!=0 pour que le fils ne continue pas dans la boucle
return 0;
} |
Partager