Codice: Seleziona tutto
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#define WRITE 1
#define READ 0
int main(int argc,char* argv[]){
int array[]={10,11,12,32,33}; //Array di input;
int fd[2],i,nread;
pid_t pid;
int buffer[5]; //Buffer che dovrà contenere i valori modificati dell'array;
int status;
printf("\nSono il processo padre e ho pid %d\n",getpid());
printf("\nStampo il valore dell'array inizializzato da me!!!!!\n");
for(i=0;i<5;i++)
printf("\nCella %d------>%d\n",i,array[i]);
pipe(fd);
pid=fork();
if(pid<0){
fprintf(stderr,"\nErrore %d della fork!!!!\n",errno);
exit(-1);
}
if(pid==0){
close(fd[READ]);
printf("\nSono il processo figlio di %d e ho pid %d\n",getppid(),getpid());
printf("\nDetermino i nuovi valori dell'array!!!\n");
for(i=0;i<5;i++){
buffer[i]=i+5;
printf("\nCella %d-------->%d\n",i,buffer[i]);}
write(fd[WRITE],buffer,5);
close(fd[WRITE]);
}
else{
//Processo padre;
close(fd[WRITE]);
nread=read(fd[READ],buffer,5);
printf("\nIl valore dell'array modificato da mio figlio e':\n");
for(i=0;i<5;i++){
array[i]=buffer[i];
printf("\nCella %d---->%d\n",i,array[i]);}
waitpid(pid,&status,0);
close(fd[READ]);
}
printf("\nHa terminato il processo %d\n",getpid());
return 0;
}
