Я использую 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