//Prog ecrivain
#include<stdio.h>
#include<sys/ipc.h>
#define KEY 2001
main()
{
int shmid;
int i;
char *shmadr;
char **tab=(char **)malloc(2*sizeof(char *));
/*variables sem*/
int s;
unsigned int ini[1];
tab[0]="+++++";
tab[1]="-----" ;
ini[0]=1;
if((shmid=shmget((key_t)KEY,512,IPC_CREAT|0666))==-1)
{
perror("IPC_CREAT" );
exit(1);
}
else
{
shmadr=shmat(shmid,0,0);
strcpy(shmadr,tab[0]);
while(1)
{
strcpy(shmadr,tab[0]);
strcpy(shmadr,tab[1]);
}
shmdt(shmadr);
shmctl(shmid,IPC_RMID,0);
}
}
//PRog lecteur
#include<stdio.h>
#include<sys/ipc.h>
#define KEY 2001
main()
{
char *shmadr;
char *str=(char *)malloc(255);
int shmid;
int count=0;
int errCount=0;
unsigned int ini[1];
ini[0]=1;
if((shmid=shmget((key_t)KEY,0,0))==-1)//512,IPC_CREAT|0666))==-1)
//on pourrait mettre shmget((key_t)KEY,0,0); si on le lance apres le serveur.
{
perror("SHMGET" );
exit(1);
}
else
{
shmadr=shmat(shmid,0,0);
while(count<100)
{
p(s,0);
strcpy(str,shmadr);
v(s,0);
if(!((!strcmp(str,"+++++" ))||(!strcmp(str,"-----" ))))
{
printf("%s\n",str);
errCount++;
}
usleep(10);
count++;
}
printf("\nPourcentage d'erreur: %d\n",errCount/1);
shmdt(shmadr);
}
}
On j'ai rien testé j'ai essaié de simplier un vieux gros n'exemple. En gros tu lances les 2 progs (d'abord l'écrivain) et il faut rajouter des semafores pour éviter les conflis.
Good luck
---------------
http://www.cheata.net le site qui vous donne la banane!