2015-04-21 2 views
1

Итак, я создаю программу, которая будет иметь несколько процессов, которым все должны получить доступ к узлу, который я определил. Поэтому я инициализирую память следующим образом:Как разделить кусок памяти по нескольким процессам с помощью shmget

sharedMemory = (node*)malloc(sizeof(node));//sharedMemory is a global node 
    sharedMemory->syskey = sys_key;//just a variable from a function 
    segment_id = shmget(sharedMemory->syskey, size, S_IRUSR | S_IWUSR | IPC_CREAT); 
    sharedMemory = (node*)shmat(segment_id, NULL, 0); 

И это, кажется, идет хорошо. Однако мне потом нужно получить доступ к этой части памяти позже. Так что я пытался это сделать:

segment_id = shmget(sharedMemory->syskey, size, S_IRUSR | S_IWUSR | IPC_CREAT); 
    sharedMemory = (node*)shmat(segment_id, NULL, 0); 

И затем используйте sharedMemory. Однако, когда я сделал это, все в sharedMemory, похоже, было сброшено до «null» (массивы и т. Д.). Я уверен, что я просто делаю что-то глупое, но документация немного сбивает меня с толку. Любая помощь будет оценена по достоинству.

ответ

1

Я понял, что делаю это правильно, за исключением того факта, что sharedMemory является глобальной переменной. Мне нужно было просто повторно объявить это, когда я позвонил shmat и приложил его. Кажется, сейчас работает.

Смежные вопросы