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