Вся система System V IPC полна плохих конструкций, подобных этой. (Под плохим дизайном я подразумеваю крошечное пространство имен для общих ресурсов, где вам приходится полагаться на глупые уловки, такие как ftok
, чтобы получить ключ и молиться, чтобы это не конфликтовало с другими используемыми ключами.)
Если возможно, я бы сделал вид, что его не существует, и вместо этого использовал бы общую память POSIX, когда это возможно (а также примитивы синхронизации потоков POSIX вместо семафоров System V). Единственный случай, когда я могу вспомнить, где вам нужна общая память System V, - это расширение образа совместно используемой памяти X и, возможно, другие расширения X.
Редактировать: Чтобы лучше ответить на вопрос ОП о назначении ftok
: key_t
обычно является 32-разрядным, и да, вы можете просто выбрать 32-разрядное число самостоятельно, но проблема в том, что люди не могут одинаково выбрать все числа, и вероятность столкновения слишком высока. ftok
позволяет вам выбрать файл (который должен быть уникальным для вашего приложения), целое число и хэшировать номер инода файла с выбранным вами целым числом, что должно привести к гораздо более равномерному распределению выбора ключей по пространству клавиш. Конечно, вы также можете просто выбрать ключ с rand
, если у вас есть возможность передать результат другим процессам, которым необходимо подключить разделяемую память.