Witam wszystkich, jestem nowy.
Mam Problem z przesłaniem tablicy int-ów z procesu rodzica do dziecka.
Proces dziecka czyta z potoku kolejne liczby tyle ,że elementy od 1 do n czyta dwa razy np.

wysłane:
1,2,3,4,5,6,7,8,9
odebrane:
1,2,2,3,3,4,4,5,5

Docelowo program na sortować tablice liczb ,najpierw w jednym procesie ,a następnie połowę tablicy posortuje "rodzic" , a drugą połowę "dziecko" ,dalej quick sortem złączyć dwie połówki i porównać czasy sortowania przez 1 i 2 procesy dla różnych n.

 
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/time.h>




struct timeval start,stop, temp;

void czas()
{

gettimeofday(&stop,0);

if ((stop.tv_usec-start.tv_usec)<0) {
		temp.tv_sec = stop.tv_sec-start.tv_sec-1;
		temp.tv_usec = 1000000000+stop.tv_usec-start.tv_usec-999000000;
	} else {
		temp.tv_sec = stop.tv_sec-start.tv_sec;
		temp.tv_usec = stop.tv_usec-start.tv_usec;
	}




    printf( "%lu", temp.tv_sec);
    printf( "%s", "s  ");  
    printf( "%lu", temp.tv_usec);
    printf( "%s\n", "ms  ");  
 
}

void bubble(int tab[], int i)
{

   



  int x,y,n=i;
 int tmp;
  int change;
 
  for (x=0; x<n-1; ++x) 
  {

       change=0;
       for (y=0; y<n-1-x; y++)

       { 

          if (tab[y+1] < tab[y])   //porównanie sąsiądów
          {  
              tmp = tab[y];      
              tab[y] = tab[y+1];
              tab[y+1] = tmp;    //wypchanie bąbelka     
              change=1;

          }
       }
     if(!change) break;      // nie dokonano zmian - koniec!
  }
}





int main( int argc, char **argv )
  {
    

pid_t pid;
int mypipe[2];
if(pipe(mypipe))  //Funkcja pipe() umieszcza dwa nowe deskryptory plików w tablicy mypipe[]
//(mypipe[0] – deskryptor pliku tylko do odczytu, mypipe[1] – deskryptor pliku tylko do zapisu)
{
fprintf(stderr, "Pipe- nie udało się\n");       //pisze do standardowego wyjścia błędów
return EXIT_FAILURE;
}

//tworzymy proces dziecko

pid=fork();

if (pid==(pid_t)0)      //sprawdza czy proces jest rodzicem czy dzieckiem
{
//proces dziecko
int i;
 
if(read(mypipe[0], &i, sizeof(i))) printf("\n%d", i);
int tab[i];
int j;
for(j=0;j<i;j++)
{

read(mypipe[0], &tab[j], sizeof(tab[j]));
printf("\n%d", tab[j]);
}


return EXIT_SUCCESS;
}



else if (pid<(pid_t)0)
{
//tworzenie potomka nie udało się
fprintf(stderr,"Fork failed\n");
return EXIT_FAILURE;
}



else
{
//proces rodzica
int i,j;

for(i = 10 ; i<11;i=i+1000)

{
srand ( time(NULL) );

int tab[i],tab2[i];

for (j=0; j<i;j++) {
tab[j]=tab2[j]=rand()%i;
printf("\n%d", tab[j]);}
printf ("\n%s", "jeden proces: ");

gettimeofday(&start, 0);
bubble(&tab[0],i);
czas();

close (mypipe[0]);
int k=i/2;
write(mypipe[1], &k, sizeof(k));

for(k=i/2;k<i;k++)
{

printf("\n%d", tab2[k]);
write(mypipe[1], &tab2[k], sizeof(&tab2[k]));
}
printf ("\n");

}

return EXIT_SUCCESS;
}


}