Makefile presque en place

master
Philippe Pittoli 2011-03-17 16:25:02 +01:00
parent 04bdb3700f
commit bcea03f4ae
2 changed files with 49 additions and 40 deletions

View File

@ -1,2 +1,26 @@
CC=gcc C = gcc
SER = server
CONS = consommateur
PROD = producteur
CFLAGS = -Wall -g
COMMUN = sema.o global.o
CONSOM = consommateur.o
PRODUCT = producteur.o
all: $(CONSOM) $(PRODUCT)
$(CC) $(CONSOM) -o $(CONS)
$(CC) $(PRODUCT) -o $(SER)
consommateur.o : consommateur.h consommateur.c
$(CC) -o $@ -c $< $(CFLAGS)
producteur.o : producteur.h producteur.c
$(CC) -o $@ -c $< $(CFLAGS)
sema.o : sema.h sema.c
$(CC) -o $@ -c $< $(CFLAGS)
clean:
@rm -rf *.o *.out
mrproper: clean
@rm $(PROD) $(CONS) 2>/dev/null

View File

@ -11,83 +11,68 @@
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
int creat_sem(key_t cle,int val)
/* creation du semaphore cle ayant comme valeur initiale val /* creation du semaphore cle ayant comme valeur initiale val
retourne un identificateur de semaphore >=0 ou -1 si erreur retourne un identificateur de semaphore >=0 ou -1 si erreur
*/ */
int creat_sem(key_t cle,int val)
{ {
int semid; int semid;
union semun{ union semun{
int val; int val;
struct semid_ds *buf; struct semid_ds *buf;
ushort *array; ushort *array;
} arg; } arg;
if((semid=semget(cle,1,0666+IPC_CREAT+IPC_EXCL))>= 0) if((semid=semget(cle,1,0666+IPC_CREAT+IPC_EXCL))>= 0)
{ {
arg.val=val; arg.val=val;
if(semctl(semid,0,SETVAL,arg)< 0) if(semctl(semid,0,SETVAL,arg)< 0)
semid = -1; semid = -1;
} }
return(semid); return(semid);
} }
/*--------------------------------------------------------------*/ /*--------------------------------------------------------------*/
int del_sem(key_t cle)
/* destruction du semaphore cle /* destruction du semaphore cle
retourne: retourne:
0 si la destruction du semaphore s est effectuee correctement 0 si la destruction du semaphore s est effectuee correctement
-1 si erreur -1 si erreur
*/ */
int del_sem(key_t cle)
{ {
return(semctl((semget(cle,0,0)),0,IPC_RMID,0)); return(semctl((semget(cle,0,0)),0,IPC_RMID,0));
} }
/*---------------------------------------------------------------*/
int open_sem(key_t cle)
/* recherche le semaphore cle /* recherche le semaphore cle
retourne l'identificateur du semaphore >=0 ou -1 si erreur retourne l'identificateur du semaphore >=0 ou -1 si erreur
*/ */
int open_sem(key_t cle)
{ {
return(semget(cle,0,0));
return(semget(cle,0,0));
} }
/*----------------------------------------------------------------*/
void P(int semid) void P(int semid)
{ {
struct sembuf psembuf; struct sembuf psembuf;
psembuf.sem_op = -1; psembuf.sem_op = -1;
psembuf.sem_flg = 0; psembuf.sem_flg = 0;
psembuf.sem_num = 0; psembuf.sem_num = 0;
semop(semid,&psembuf,1); semop(semid,&psembuf,1);
} }
/*------------------------------------------------------------------*/
void V(int semid) void V(int semid)
{ {
struct sembuf vsembuf; struct sembuf vsembuf;
vsembuf.sem_op = 1; vsembuf.sem_op = 1;
vsembuf.sem_flg = 0; vsembuf.sem_flg = 0;
vsembuf.sem_num = 0; vsembuf.sem_num = 0;
semop(semid,&vsembuf,1); semop(semid,&vsembuf,1);
} }
/*--------------------------------------------------------------*/