Который файл должен я передавать как аргумент пути ftok ()

Это упоминается в ftok () руководство

key_t ftok(const char *pathname, int proj_id);

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

Я смущен const char *pathname.

Какова была бы лучшая практика для него? На моей существующей системе я могу передать "/home/Andrew/anyfile" но не возможно, что другие системы, над которыми должна работать моя программа, будут иметь этот файл.

Как насчет я использую "/etc/hosts/" или "/etc/inittab" потому что я уверен, что все такие системы будут иметь эти два файла? Действительно ли это - хорошая идея? Это может вызвать какую-либо проблему?

Я не хочу просить, чтобы пользователь ввел имя файла во время выполнения или передал имя файла как параметр командной строки.

Есть ли любой другой другой и лучший способ решить pathname?
Каким путем является лучший и самый надежный?

Спасибо за внимание.

13
задан alk 6 April 2013 в 10:06
поделиться

3 ответа

Как правило, вы бы использовали файл, связанный с само приложение.

Например, у нас было приложение, которое загружало файл конфигурации в общую память (анализируемым и эффективно доступным способом - подумайте о XML-файле, который был преобразован в структуры в памяти с быстрыми указателями и т. Д.), И мы создали сегмент разделяемой памяти из ftok , полученный из самого файла конфигурации.

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

Вы также не ограничены файлами, вы можете использовать сам / etc или / tmp или даже / , если необходимо.

Я говорю «если надо», потому что это немного опасно. Вызов ftok даст вам уникальный ключ на основе спецификации вашего файла и вашего идентификатора. Если вы используете свой собственный файл, такой как /etc/andrew.conf , вы можете быть достаточно уверены, что не столкнетесь ни с одним другим ftok -вернутый ключ.

Однако, если вы и все остальные решите использовать / tmp в качестве части спецификации файла, то единственным отличием будет идентификатор. Следовательно, намного легче столкнуться с другими клавишами.

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

Итак, если мне нужно 27 семафоров и 15 блоков разделяемой памяти, они все используют /etc/pax.conf как спецификацию файла и идентификаторы от 1 до 42 (и мое приложение знает , какой идентификатор относится к какому объекту).

15
ответ дан 1 December 2019 в 23:14
поделиться

Вероятно, лучше всего использовать argv [0] одного из ваших исполняемых файлов. На странице руководства написано

The resulting value is the same for all pathnames that name the same file, ...

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

3
ответ дан 1 December 2019 в 23:14
поделиться

Вы можете динамически создать символ * для пути на основе файла конфигурации, параметра командной строки и т. Д.

Просто передайте этот символ * в функцию.

1
ответ дан 1 December 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: