Ну, как правило, вы используете файл, связанный с самим приложением.
Например, у нас было приложение, которое загружало файл конфигурации в разделяемую память (в разобранном, эффективно доступном виде - представьте файл XML, который был превращен в структуры в памяти с помощью быстрых указателей и т. Д.), И мы создали сегмент общей памяти из ftok
, полученный из самого файла конфигурации.
В худшем случае, если у вас нет файлов конфигурации для вашего приложения, попробуйте использовать сам исполняемый файл. Вы можете быть совершенно уверены, что он где-то существует в системе (поскольку вы его запускаете).
Вы также не ограничены файлами, вы можете использовать /etc
сам или /tmp
или даже /
, если необходимо.
Я говорю "если нужно", потому что это немного опасно. Вызов ftok
даст вам уникальный ключ, основанный на спецификации вашего файла и вашем идентификаторе. Если вы используете свой собственный файл, такой как /etc/andrew.conf
, вы можете быть вполне уверены, что вы не столкнетесь с каким-либо другим ключом, возвращенным ftok
.
Однако, если вы и все остальные решите использовать /tmp
в качестве части спецификации файла, тогда единственным отличием будет идентификатор. Следовательно, столкнуться с другими ключами намного проще.
Я всегда использовал спецификацию файла как действительно уникальное значение для моего приложения, а затем просто использовал идентификатор для конкретной вещи, которую я хочу создать.
Итак, если мне нужно 27 семафоров и 15 блоков общей памяти, они все используют /etc/pax.conf
в качестве спецификации файла и идентификаторы от 1 до 42 (а мое приложение знает какой идентификатор относится к какому объекту).