Accueil     Soft. MacOSX     Soft. MacOS/PC     PHP     ROMS GBA     TP d'info     TI-92     DBZ-GT     Martingales     Galeries     Liens     @  

TD8-9 Systeme, Ex3

compte.c :
#include <stdio.h>
#include "ipcTools.h"
#define ITER 1000

int accedeMemp(key_t cle,int nb){
return shmget(cle,nb,0600);
}

void * attacheMemp(int shmid){
return shmat(shmid,0,0);
}

int main(void) {
key_t key;
int * shared,locale;
int i,shmid;

key=ftok("/dc/password",0);
shmid=accedeMemp(key,sizeof(int));
if (shmid==-1) {
perror("acces shm");
exit(1);
}
/* attachement shm */
shared=(int*) attacheMemp(shmid);
if (shared==((int *)-1)) {
perror("attachement memoire echec");
exit(1);
} for(i=0;i<ITER;i++){
locale=*shared;
printf("fils %d : valeur = %d\n",getpid(),locale);
locale++;
*shared=locale;
printf("fils %d : valeur = %d\n",getpid(),locale);
}
return 0;
}


EX3.c:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/wait.h>
#define NBPROCS 10

int creerMemp(key_t cle,int nb);
int accedeMemp(key_t cle,int nb);
void * attacheMemp(int shmid);
int detruitMemp(int shmid);
void * shmalloc(key_t cle,int size);
int shmfree(key_t cle);

int creerMemp(key_t cle,int nb){
return shmget(cle,nb,IPC_CREAT|IPC_EXCL|0600);
}

int accedeMemp(key_t cle,int nb){
return shmget(cle,nb,0600);
}

void * attacheMemp(int shmid){
return shmat(shmid,0,0);
}

int detruitMemp(int shmid){
return shmctl(shmid,IPC_RMID,0);
}

void * shmalloc(key_t cle,int size){
void * res;
int id=creerMemp(cle,size);
if (id==-1)
return 0;
res=attacheMemp(id);
if (res==(void*)-1) {
detruitMemp(id);
return 0;
}
return res;
}

int shmfree(key_t cle){
return detruitMemp(shmget(cle,1,0));
}


int main(void){ /* EX3 */
key_t key;
int * N;
void * res;
pid_t pid;
int i;


key=ftok("/dc/password",0);
N=(int *) shmalloc(key,sizeof(int)); /* error */
if (!N){
printf("shmalloc ehec\n");
exit(1);
}
*N=15;
printf("Bonjour : %d\n",*N);
for(i=0;i<NBPROCS;i++){
switch(pid=fork()) {
case -1: perror("erreur fork");
exit(2);
case 0:
// printf("fils %d",i);
execlp("./compte","compte",0);
// puts("Fin fils %d",i);
exit(0); // facultatif
default:
/* PERE */
}
}
/* On attend TOUS les fils */
for(i=0;i<NBPROCS;i++)
wait(0);
/* tous les fils sont termines */
/* affichage du resultat final*/
printf("Resultat final : %d",*N);
shmfree(key);
return 0;
}

/* ©2003 All Rights Reserved to www.Software-DS.com */





Haut de la page - Page précédente - Page générée en 0.00847 sec.
Recherche personnalisée
 

1815782 visiteurs.   ©2001-2019 All Rights Reserved to Software-DS.com
Made with a mac  
Confidentialité