在管道中传递来自进程的整数数组

Passing an array of integers from process within pipes

我要用 C 语言解决一个问题。我有两个进程,P1 和 P2。 P1 接受一个整数数组,必须将它发送给 P2,P2 必须只检查这个数组中的素数,修改它并发送回 P1,P1 必须打印修改后的数组。

示例: 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 时,它没有正确打印。

您的 read() 调用正在将 N 字节读入 N int 的数组中。使用 read(fd, buf, N * sizeof(int))。看来您还需要修复 write()