Общая память исчезает после завершения процесса писателя, хотя SHMCTL не используется для его удаленияLinux

Ответить
Anonymous
 Общая память исчезает после завершения процесса писателя, хотя SHMCTL не используется для его удаления

Сообщение Anonymous »

Я использую System V общую память в своей программе. Процесс писателя успешно создает общую память, используя shmget () . Когда процесс писателя заканчивается, я замечаю, что сегмент общей памяти исчезает, хотя я не call shmctl () с ipc_rmid для его удаления.
Вот код для автора:

Вот код для чтения: < /p>
// reader.c
#include
#include
#include
#include

#define SHM_KEY 0x1234
#define SHM_SIZE sizeof(int)

int main() {
int shmid = shmget(SHM_KEY, SHM_SIZE, 0666);
if (shmid == -1) {
perror("shmget failed");
exit(1);
}

int *shm_ptr = (int *)shmat(shmid, NULL, 0);
if (shm_ptr == (void *)-1) {
perror("shmat failed");
exit(1);
}

printf("Reader: read %d from shared memory.\n", *shm_ptr);
shmdt(shm_ptr);
return 0;
}
[/code]
Когда я запускаю писатель, я вижу общую память, используя IPCS -M . Однако после того, как писатель заканчивает и выходит, сегмент общей памяти исчезает, и я не могу получить к нему доступ к читателю. < /P>
Что может вызвать такое поведение? Есть ли настройка системы, которая может привести к автоматическому удалению общей памяти после выхода писателя? Эта программа работает правильно на macos , где общая память сохраняется после выхода писателя. Тем не менее, это не удается на linux : общий сегмент памяти исчезает, как только процесс писателя заканчивается, и я не могу получить к нему доступ к читателю.>

Подробнее здесь: https://stackoverflow.com/questions/795 ... mctl-is-no
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»