我试着解决这个问题。
问题是
我应该创建一个创建子进程的进程。
子进程应该将1到10写入int数组大小为10 {初始值为0}。
母亲过程应该等到孩子完成写作。 子进程完成后,母进程打印出数组(例如1,2,...,10)并将all全部替换为-1并再次打印出数组。
儿童是生产者,母亲是消费者。 (只有一个孩子,只有一个消费者。他们只做一次。)
#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
#include<stdlib.h>
int main(){
int arr[10]={0,};
pid_t pid;
int state;
pid = fork();
if(pid == -1) // error
{
printf("can't fork, error\n");
exit(-1);
}
else if (pid == 0) // Child ( producer )
{
printf("\nProducer is created.\n");
printf("array: ");
for(c=0; c<10; c++)
{
printf("%d ", arr[c]);
arr[c]=c+1;
}
}
else // Mother ( consumer )
{
pid=wait(&state);
sleep(1);
printf("\nConsumer takes control of array");
printf("\narray:");
for(j=0;j<10;j++)
{
printf(" %d", arr[j]);
}
printf("\nConsumer is done.");
printf("\narray: ");
for ( i =0; i<10; i++)
{
arr[i]=-1;
printf("%d ", arr[i]);
}
printf("\ndone\n");
exit(0);
}
return 0;}
我想要输出
0 0 0 0 0 0 0 0 0 0
1 2 3 4 5 6 7 8 9 10
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
但
我的出局是
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
我的代码有什么问题?
答案 0 :(得分:2)
进程的内存地址空间将&#34; copy on write&#34;。因此,两个进程之间不共享数组。
答案 1 :(得分:0)
如果您想在不同进程(例如父进程和子进程)之间共享大量数据,可以采用多种方式。其中三个最常见的是
shm*
API提供mmap
API提供建议:阅读已故伟大的W. Richard Stevens可以找到的所有内容,例如 Unix环境中的编程。