Мне нужна разделяемая память в моей программе, но если процесс неожиданно прекратит работу, сегменты разделяемой памяти все равно будут существовать и вызывать ошибку сегмента при каждом запуске программы.Есть ли способ убедиться, что совместно используемая память отключается после завершения процесса, без необходимости явного вызова unlink
?Я слышал, что System V может сделать это с shmctl
, но есть ли способ сделать это с POSIX?
Например, если я нахожусь в Linux и имею код:
char** global_msg;
int shm_fd1 = shm_open("GLOBAL_MSG", O_CREAT | O_EXCL | O_RDWR, S_IRWXU | S_IRWXG);
ftruncate(shm_fd, MAX_MSG_LEN);
global_msg = (char **) mmap(NULL, MAX_MSG_LEN, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
*global_msg = 0;
как мне убедиться, что "GLOBAL_MSG" не связан, если процесс неожиданно умирает?