Я пытаюсь создать массив структур для совместного использования между родительским и дочерним процессами, используя "shmget". Я следую шаблону моего профессора, но он не включает структуры и массивы (в общей памяти хранится только целое число). Следующий код компилируется без предупреждений, но возвращает «0» в качестве вывода, я ожидаю увидеть «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;
}