【发布时间】:2012-01-01 11:37:48
【问题描述】:
我想做以下事情:
父进程创建一个子进程。然后子进程从用户那里读取 n 个 int 并将它们存储在共享内存中。然后父进程显示它们。
我达到了以下几点:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#define SHMSIZE 27
int main() {
int shmid;
int *shm;
int *n;
if(fork() == 0) {
shmid = shmget(2009, SHMSIZE, 0);
shm = shmat(shmid, 0, 0);
n = shm;
int i;
for(i=0; i<5; i++) {
printf("Enter number<%i>: ", i);
scanf("%d", n++);
}
printf ("Child wrote <%d>\n",shm);
shmdt(shm);
}
else {
wait();
int *s;
shmid = shmget(2009, SHMSIZE, 0666 | IPC_CREAT);
shm = shmat(shmid, 0, 0);
s = shm;
wait(NULL);
printf ("Parent reads <%d>\n",shm) ;
shmdt(shm);
shmctl(shmid, IPC_RMID, NULL);
}
return 0;
}
输出就是这一行:
Enter number<1>:
如果我输入一个数字,比如 25,它会输出:
Parent reads <r>
r: 每次执行代码时随机 -ve 数字变化
它从未通过子进程代码!我这样做有错吗?
【问题讨论】:
-
为什么不在parent中创建共享内存,然后运行child呢?
-
父进程中第一次调用
wait是什么? -
另外,你对
scanf的论点是错误的。 -
@K-ballo 我被要求这样做。我更愿意坚持这一点。
-
@JoachimPileborg
wait()是强制父母等待孩子完成。scanf()有什么问题?
标签: c fork shared-memory