Ho risolto il problema con le pipe!
Ora il giochetto tra processi funziona..funziona tutto!
Posto il codice nel caso possa servire a qualcuno!DI nuovo grazie Valia per il supporto!
codice:
#include <signal.h>
#include <ctype.h>
#include <time.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
int punt1=0;
int punt2=0;
int flag=0;
int pipe1[2],pipe2[2];
int N;
int processo;
void padre(void);
int pid;
int chiamata=0;
int ricevere(int processon){
int chiamat;
sleep(2);
read(pipe1[0],&chiamat,sizeof(int));
if(processon==chiamat|processon==(chiamat+N)){
printf("ciao sono il processo %d \n",processon);
write(pipe2[1],&processon,sizeof(int));
exit(5);
}
else exit(0);
}
int npartita=0;
int main(int argc,char * argv[]){
do{
npartita++;
printf("inizio nuova partita numero %d: \n \n",npartita);
N=atoi(argv[1]);
int tabpid[N*2];
if (pipe(pipe1)<0)
{
perror("pipe error");
exit(-1);
}
if (pipe(pipe2)<0)
{
perror("pipe error");
exit(-1);
}
int i;
srand(time(NULL));
printf( "point \n");
chiamata=rand()% N;
for (i=0;i<N*2;i++)
{
if ((tabpid[i]=fork())<0)
{
perror("fork error");
exit(-1);
}
pid=tabpid[i];
if (pid==0)ricevere(i) ;
}
printf("padre");
if(pid>0)
{
int gioc;
for(i=0;i<N*2;i++)
write(pipe1[1],&chiamata,sizeof(int));
read(pipe2[0],&gioc,sizeof(int));
int i;
sleep(1);
if(gioc>N)punt2++;
else punt1++;
printf("il punteggio di 1 è %d il punteggio di 2 è %d \n",punt1,punt2);
}
}while(1);
}