Общая память Linux - PullRequest
       9

Общая память Linux

3 голосов
/ 11 мая 2010

Функция, которая создает разделяемую память в * программировании inux, принимает ключ в качестве одного из своих параметров.

Что означает этот ключ? И как я могу это использовать?

Edit:

Идентификатор не общей памяти

Ответы [ 2 ]

4 голосов
/ 11 мая 2010

Это просто ключ System V IPC (межпроцессное взаимодействие), поэтому разные процессы могут создавать или подключаться к одному и тому же блоку общей памяти. Ключ обычно создается с помощью ftok(), который превращает полностью указанное имя файла и идентификатор проекта в используемый ключ.

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

Например, у нас когда-то было приложение, которое использовало файл конфигурации, обработанный нашим кодом lex / yacc, поэтому мы просто использовали это имя пути и один идентификатор проекта для каждого отдельного блока общей памяти (их было три или четыре в зависимости от цели рассматриваемый процесс). Это действительно имело большой смысл, так как это были проанализированные и оцененные данные из того файла конфигурации, который хранился в блоках общей памяти.

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

0 голосов
/ 12 мая 2010

Функции общей памяти posix (shm_open и friends) имеют более удобный интерфейс, поскольку они могут принимать уникальное имя файла, которое должно использоваться приложениями для открытия одного и того же блока общей памяти.

Сказав это, как правило, также возможно открыть файл в / dev / shm под Linux, а затем отобразить его с помощью MAP_SHARED, что почти так же.

...