Avancement certain
parent
13119a2d53
commit
07778c1db7
Binary file not shown.
Binary file not shown.
|
@ -1,10 +1,10 @@
|
||||||
CC = gcc
|
CC = gcc
|
||||||
CONS = consommateur
|
CONS = consommateur
|
||||||
PROD = producteur
|
PROD = producteur
|
||||||
CFLAGS = -Wall -g
|
CFLAGS = -Wall -g
|
||||||
COMMUN = sema.o global.o
|
COMMUN = sema.o global.o
|
||||||
all: $(COMMUN) consommateur.o producteur.o
|
all: $(COMMUN) consommateur.o producteur.o
|
||||||
$(CC) consommateur.o -o $(CONS) sema.o
|
$(CC) consommateur.o -o $(CONS) -std=c99 sema.o
|
||||||
$(CC) producteur.o -o $(PROD) sema.o
|
$(CC) producteur.o -o $(PROD) sema.o
|
||||||
|
|
||||||
sema.o : sema.c sema.h
|
sema.o : sema.c sema.h
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/sem.h>
|
#include <sys/sem.h>
|
||||||
|
#include <sys/shm.h>
|
||||||
#include "consommateur.h"
|
#include "consommateur.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "sema.h"
|
#include "sema.h"
|
||||||
|
@ -17,22 +18,51 @@
|
||||||
int main( int argc, char **argv)
|
int main( int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
|
||||||
if(argc < 2) { printf("Usage : %s numIPC\n", argv[0]); exit(EXIT_FAILURE); }
|
int shmid, shm_key;
|
||||||
|
int mutex_data, mutex_tpa;
|
||||||
|
key_t sem_key_data;
|
||||||
|
key_t sem_key_tpa;
|
||||||
|
const char CTRL_D = 4;
|
||||||
|
|
||||||
key_t clef = (key_t) atoi(argv[1]);
|
if(argc < 2) { printf("Usage : %s nSHM \n", argv[0]); exit(EXIT_FAILURE); }
|
||||||
|
|
||||||
MEMP memoireP;
|
shm_key = (key_t) atoi(argv[1]);
|
||||||
memoireP.tete = 0;
|
sem_key_tpa = MUTEX_1;
|
||||||
memoireP.queue = 0;
|
sem_key_data = MUTEX_2;
|
||||||
|
|
||||||
int semid;
|
MEMP * memoireP;
|
||||||
semid = creat_sem( clef, MAX_PROD);
|
|
||||||
if(semid >= 0)
|
|
||||||
{
|
|
||||||
|
|
||||||
sleep(10);
|
if((shmid = shmget(shm_key, sizeof(MEMP), IPC_CREAT|IPC_EXCL|0766)) == -1)
|
||||||
del_sem(clef);
|
{ perror("shmget"); exit(EXIT_FAILURE);}
|
||||||
}
|
|
||||||
|
if((memoireP = (MEMP *) shmat(shmid, 0 , 0766)) == (void *) -1)
|
||||||
|
{ perror("shmat"); exit(EXIT_FAILURE); }
|
||||||
|
|
||||||
|
// MUTEX_2 => DATA
|
||||||
|
if((mutex_data = creat_sem( sem_key_data, MAX_PROD)) == -1)
|
||||||
|
{ perror("creat_sem"); exit(EXIT_FAILURE); }
|
||||||
|
|
||||||
|
if((mutex_tpa = creat_sem( sem_key_tpa, MAX_PROD)) == -1)
|
||||||
|
{ perror("creat_sem"); exit(EXIT_FAILURE); }
|
||||||
|
|
||||||
|
P(mutex_data);
|
||||||
|
|
||||||
|
memoireP->tete = 0;
|
||||||
|
memoireP->queue = 0;
|
||||||
|
V(mutex_data);
|
||||||
|
|
||||||
|
for(int i = 0; i < MAX_PROD ; i++)
|
||||||
|
memoireP->tpa[i] = -1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sleep(10);
|
||||||
|
|
||||||
|
if(shmctl(shmid, IPC_RMID, 0) < 0)
|
||||||
|
{ perror("shmctl"); exit(EXIT_FAILURE); }
|
||||||
|
|
||||||
|
if(mutex_data >= 0) { del_sem(sem_key_data); }
|
||||||
|
if(mutex_tpa >= 0) { del_sem(sem_key_tpa); }
|
||||||
|
|
||||||
exit(EXIT_SUCCESS);
|
exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,20 +11,20 @@
|
||||||
int main( int argc, char **argv)
|
int main( int argc, char **argv)
|
||||||
{
|
{
|
||||||
if(argc < 2) { printf("Usage %s numIPC\n", argv[0]); exit(EXIT_FAILURE); }
|
if(argc < 2) { printf("Usage %s numIPC\n", argv[0]); exit(EXIT_FAILURE); }
|
||||||
int *zone;
|
MEMP *memoireP;
|
||||||
int memid;
|
int shmid;
|
||||||
int clef = atoi(argv[1]);
|
int shm_key = atoi(argv[1]);
|
||||||
if(clef == -1) { printf("Usage %s numIPC message\n", argv[0]); exit(EXIT_FAILURE); }
|
if(shm_key == -1) { printf("Usage %s numIPC message\n", argv[0]); exit(EXIT_FAILURE); }
|
||||||
|
|
||||||
/* création ou lien avec une zone partagée */
|
/* création ou lien avec une memoireP partagée */
|
||||||
memid = shmget(clef, 100, 0700 | IPC_CREAT);
|
shmid = shmget(shm_key, 100, 0700 | IPC_CREAT);
|
||||||
if (memid == -1) { perror("shmget"); return (EXIT_FAILURE); }
|
if (shmid == -1) { perror("shmget"); return (EXIT_FAILURE); }
|
||||||
|
|
||||||
/* montage en mémoire */
|
/* montage en mémoire */
|
||||||
zone = shmat(memid, NULL, 0);
|
memoireP = shmat(shmid, NULL, 0);
|
||||||
|
|
||||||
/* utilisation */
|
/* utilisation */
|
||||||
printf("zone[0] = %d\n", zone[0]++ );
|
// printf("memoireP[0] = %d\n", memoireP[0]++ );
|
||||||
|
|
||||||
return (EXIT_SUCCESS);
|
return (EXIT_SUCCESS);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue