Estoy creando, escribiendo y leyendo desde un segmento compartido en Linux usando las funciones ftok/shmget/shmat/shmdt.
Si escribo en el segmento en un programa que luego sale, y luego leo el segmento de otro programa más tarde, me sorprende encontrar los datos todavía allí.
Habría esperado que cuando el último proceso que comparte un segmento hace un shmdt, el segmento se liberaría.
¿Puedo confiar en este comportamiento? ¿O es análogo a continuar usando un puntero después de liberarlo ()?
El área de memoria compartida permanece hasta que se elimina mediante shmctl(shmid,IPC_RMID,...) [o reinicio del sistema]. Esto surtirá efecto después de que cada proceso haya realizado shmdt [o terminado].
La semántica es muy similar a un archivo. shmat es como open . shmdt es como close y [arriba] shmctl es como unlink .
Si cierra un archivo, le gustaría que persistiera hasta que se elimine específicamente, ¿no es así? Entonces, los segmentos de memoria compartida funcionan de manera similar
shmdt solo desconecta su memoria, no se realiza ningún borrado/sobrescritura en el segmento de datos. Hasta que algún otro proceso mapee y lo use nuevamente, los datos perdurarán.
Además, debe usar mmap más nuevo y compatible con POSIX.