разделяемая память (ipc) в linux - PullRequest
0 голосов
/ 11 марта 2011

Совместно используемая память означает, что один процесс создаст часть памяти, которую может обработать другой процесс.

Мой вопрос: как другой процесс узнает о созданной общей памяти shmid (то есть shmid=shmget(key-t ,size , permission);)?

Ответы [ 2 ]

0 голосов
/ 11 марта 2011

Они должны использовать один и тот же способ для получения key_t;обычно вы используете функцию ftok, где обе стороны используют одно и то же имя файла и значение идентификатора, поэтому они получают один и тот же ключ.

0 голосов
/ 11 марта 2011

Для упрощения: процесс, который создает общую память, определяет имя и разрешения (процесс вошедшего в систему пользователя).

По сути, вы создаете файл:

file_descriptor = shm_open("/some.shared.memory", 
                   (O_CREAT | O_RDWR),
                   (S_IREAD | S_IWRITE))  

Или, если он существует, вы можете открыть его:

file_descriptor = shm_open("/some.shared.memory",
                   (O_CREAT | O_EXCL | O_RDWR),
                   (S_IREAD | S_IWRITE))

Таким образом, имя "/some.shared.memory"это ваш способ найти общий сегмент.(Обратите внимание на флаги)

  • Посмотрите здесь http://www.kernel.org/doc/man-pages/online/pages/man7/shm_overview.7.html
  • Выполните поиск в Google по «примеру shm_open», и вы найдете множество примеров.
  • Процесс, который создает файл, определит права доступа (владелец + группа). См. Команды chown и функции fchmod , которые можно вызывать для установки разрешений.Также взгляните на umask .
...