【发布时间】:2017-04-29 16:09:16
【问题描述】:
上次,我质疑。
#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
但是
我的输出是
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
我的代码有什么问题?
=
我写了这个问题, 很多人说我应该使用共享内存, 但我从来没有在课堂上听过..
但我应该在 2 天内解决。
获得解决方案的简单方法是什么。
我找到了“shm*”,但是没有比 shm* 更简单的方法来解决这个问题了吗?
如果存在,请教我简单的例子.....
谢谢...
【问题讨论】:
-
如果只是为了完成它,为什么不直接写入文件并从中读取。或者更好的是,使用管道。
-
你知道你可以通过网络学习东西,而不必在课堂上听。这是一项有用的学习技能