Codice: Seleziona tutto
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<time.h>
#define WRITE 0
#define READ 1
int main(int argc,char* argv[]){
srand((int)time(NULL));
int status,i,n=0,size=0,nread;
int* array; //array per i dati di input;
int* buffer; //array che contiene i dati modificati;
int fd[2];
pid_t pid;
do{
size=1+rand()%10;
}while(size<5);
array=(int*)calloc(size,sizeof(int));
buffer=(int*)calloc(size,sizeof(int));
printf("\nSono il processo padre e ho pid %d\nInizializzo l'array!!!",getpid());
for(i=0;i<size;i++){
n=1+rand()%10;
array[i]=n;
printf("\nCella %d---->%d\n",i,array[i]);
}
pipe(fd);
pid=fork();
if(pid<0){
fprintf(stderr,"\nErrore %d nella fork!\n",errno);
exit(-1);
}
if(pid>0){
close(fd[READ]);
printf("\nSono il processo padre e modifico l'array di input!\n");
for(i=0;i<size;i++){
buffer[i]=array[i]+4;
printf("\nCella %d----->%d\n",i,buffer[i]);
}
write(fd[WRITE],buffer,sizeof(buffer));
waitpid(pid,&status,0);
close(fd[WRITE]);
}
else{
close(fd[WRITE]);
printf("\nSono il processo figlio di %d e ho pid %d\nLeggo l'array modificato da mio padre!",getppid(),getpid());
nread=read(fd[READ],buffer,sizeof(buffer));
for(i=0;i<size;i++)
printf("\nCella %d------>%d\n",i,buffer[i]);
close(fd[READ]);
}
printf("\nHa terminato il processo %d\n",getpid());
return 0;
}
