Я создаю, записываю и читаю из общего сегмента в Linux, используя функции ftok/shmget/shmat/shmdt.Какова продолжительность жизни разделяемой памяти в Linux
Если я напишу сегменту в одной программе, которая затем выйдет, а затем прочитает сегмент из другой программы позже, я с удивлением обнаруживаю, что данные все еще там.
Я бы ожидал, что, когда последний процесс, разделяющий сегмент, сделает shmdt, сегмент будет свободен.
Могу ли я полагаться на это поведение? Или это аналогично продолжению использования указателя после его бесплатного()?
Освобождение сегмента и замена данных - это две разные вещи. Освобождение не обязательно означает, что старые данные были заменены. Пока сегмент не будет переписан каким-либо другим процессом, он будет иметь данные, которые он изначально имел, но для других программ это мусор. –
Отсоединение (shmdt) не разрушает сегмент разделяемой памяти. Для этого вам нужно будет сделать shmctl(), указав IPC_RMID как «cmd». Но обратите внимание, что страница man (в Linux) указывает, что идентификатор сегмента разделяемой памяти не будет уничтожен до тех пор, пока все процессы не отсоединится (shmdt) от него. – TonyB