У меня есть код устаревшего кода, который использует shmget/shmat/shmdt для создания, присоединения и управления разделяемыми сегментами памяти.Изменение размера сегмента разделяемой памяти
Приложение с кодом иногда падает, оставляя сегменты в памяти. Код повторно использует один и тот же сегментный ключ для повторного подключения к ним, но проблема в том, что он использует разные объемы разделяемой памяти каждый раз и не может подключиться из-за этого.
Мой вопрос:
1) Можно ли изменить общий размер памяти на связи?
2) Если нет, то как я могу подключиться к сегменту разделяемой памяти (даже если бы я мог не знать размер), чтобы стереть его (для последующего воссоздания более нового)?
Спасибо!
Hi. Shmctl требует shmid, который может быть восстановлен только shmget. И shmget не работает, если я не знаю точный размер. Это точно проблема :). Любая идея? – SyBer
Вы должны иметь возможность использовать strace, чтобы выяснить, что использует shmget, используемое приложением. – 2010-02-14 16:37:12
У меня есть исходный код приложения - это не проблема. Проблема в том, что размер выделенной общей памяти может отличаться от уже заданного. В этом случае shmget не работает - поскольку для этого требуется EXACT-размер существующего сегмента разделяемой памяти (который неизвестен во время работы shmget). – SyBer