Сколько ключей максимальной общей памяти можно создать с помощью ftok () в Linux? - PullRequest
0 голосов
/ 01 ноября 2018

Я создаю ключи общей памяти, используя ftok(). Я хочу создать 500 ключей общей памяти. На странице man ftok() упоминается, что младшие 8 битов имеют значение.

Значит ли это, что мы можем генерировать только 256 ключей максимальной общей памяти? Если да, то как сгенерировать более 256 ключей?

Поскольку в аргументе ftok() определено, что принимает аргумент int для proj_id: -

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

Таким образом, он должен сгенерировать от 2^0 до 2^31 уникальных ключей с тем же именем пути.

1 Ответ

0 голосов
/ 02 ноября 2018

Максимальное количество ключей, которое может быть создано с помощью ftok, не ограничивается целочисленным аргументом ftok. Это зависит как от целочисленного аргумента, так и от аргумента пути. Даже если значимы только младшие 8 битов аргумента int, число путей в теории неисчислимо.

Ключ, возвращаемый ftok, имеет тип key_t, который равен __S32_TYPE, и это int. Так что это может перейти от 2^0 to 2^31 к реализации, где int имеет 4 байта.

Согласно справочной странице для ftok :

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

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

...