共享内存中用于两个进程的结构数组
|
我正在尝试创建一个结构数组,以便使用\“ shmget \”在父进程和子进程之间共享。我正在遵循教授的模板,但是他的模板不包含结构和数组(共享内存仅存储一个int)。以下代码编译时没有警告,但返回\“ 0 \”作为输出,我希望看到\“ a 10 \”。我究竟做错了什么?
当我尝试在子进程中声明新变量时,我也遇到了麻烦,我看到了其他可以在其中运行的示例,但是我不知道为什么每次都要在派生之前被迫声明它们。
typedef struct {
char character;
int number;
} item;
int main(int argc, char *argv[])
{
int mem_id;
mem_id = shmget(IPC_PRIVATE, 10*sizeof(item), SHM_R | SHM_W);
item * x;
item * y;
item * list[10];
switch(fork())
{
case -1:
perror(\"Bad fork()\"); exit(1);
case 0:
*list = shmat(mem_id, NULL, 0);
if ((int *) list == (int *) -1)
{perror(\"Child cannot attach\"); exit(1);}
x->character = \'a\';
x->number = 10;
list[0] = x;
shmdt(list);
exit(0);
default:
*list = shmat(mem_id, NULL, 0);
if ((int *) list == (int *) -1)
{perror(\"Child cannot attach\"); exit(1);}
wait((int *)0);
y = list[0];
shmdt(list);
printf(\"%c %d\\n\", y->character, y->number);
if (shmctl(mem_id, IPC_RMID, 0) <0)
{ perror(\"cannot remove shared memory\"); exit(1);}
return 0;
}
return 0;
}
没有找到相关结果
已邀请:
1 个回复
纫合峭