Передача массива целых чисел из процесса в каналах - PullRequest
0 голосов
/ 18 мая 2019

Я должен решить проблему в C. У меня есть два процесса, P1 и P2.P1 принимает массив целых чисел и должен отправить его в P2, P2 должен проверить только простые числа в этом массиве, изменить его и отправить обратно в P1, P1 должен напечатать измененный массив.

Пример: массивof Int (myArr) = {3,9,17,21,4,2,5} Конечный результат = {3,0,17,0,0,2,5}

Проблема в том, какя могу отправить массив целых чисел через каналы?

 //parent process
  if(p>0)
   {
    int i;
    int printArr[N];

    close(fd1[0]);
   //myArr is an array of integers previously declared
    write(fd1[1],myArr,N);


    close(fd1[1]);


    wait(NULL);

    close(fd2[1]);
    read(fd2[0],printArr,N);

    printf("\nPrinting modified array: ");
    for(i=0; i<N; i++)
    {
        printf("\t%d",printArr[i]);
    }

    close(fd2[0]);


}

 //child process
 else if(p==0)
   {
    int i,k;
    close(fd1[1]);
    int readArr[N];

    read(fd1[0],readArr,N);

            //here's the problem, it doesn't print correct values
    printf("Array that comes from parent");
    for(i=0; i<N; i++)
    {
        printf("\n%d\n",readArr[i]);
    }


    for(i=0; i<N; i++)
    {
        k=checkprime(readArr[i]);
        if(k==1)
            readArr[i]=0;
    }

    close(fd1[0]);
    close(fd2[0]);

    write(fd2[1],readArr,sizeof(readArr)+1);
    close(fd2[1]);

    exit(0);
      }

Как я прокомментировал мой код, когда я читал массив из канала в readArr, он печатается неправильно.

1 Ответ

2 голосов
/ 18 мая 2019

Ваш read() вызов читает N байтов в массив N int с. Используйте read(fd, buf, N * sizeof(int)). Похоже, вам также нужно исправить write().

...