在管道中传递来自进程的整数数组
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()
。
我要用 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()
。