FTOK(3)

НАЗВАНИЕ
ftok - преобразовывает имя файла и идентификатор проекта в ключ для системных вызовов

СИНТАКСИС
# include <sys/types.h>
# include <sys/ipc.h>

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

ОПИСАНИЕ
Функция ftok использует файл с именем pathname (которое должно указывать на существующий файл к которому есть доступ) и младшие 8 бит proj_id (который должен быть отличен от нуля) для создания ключа с типом key_t, используемого в System V IPC для работы с msgget(2), semget(2), и shmget(2).

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

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
В случае удачного завершения вызова возвращается значение созданного ключа key_t. При ошибке возвращается -1, а в переменную errno записывается код ошибки согласно системному вызову stat(2).

СООТВЕТСТВИЕ СТАНДАРТАМ
XPG4

ЗАМЕЧАНИЯ
В libc4 и libc5 (а также под SunOS 4.x) прототип функции выглядел так:
    key_t ftok(char *pathname, char proj_id);
В наши дни proj_id имеет тип int, хотя, как правило, используются только 8 бит. Обычно при вызове этой функции в качестве proj_id передается символ ASCII, именно поэтому поведение функции считается не определенным в случае, если proj_id равен нулю.

Естественно, не гарантируется, что возвращаемый ключ key_t уникален. Обычно производится объединение указанного байта proj_id с младшими 16 битами номера i-node и младшими 8 битам номера устройства в 32-битный результат. Легко могут возникать конфликты, например мужд файлами на /dev/hda1 и файлами на /dev/sda1.

СМ. ТАКЖЕ
ipc(5), msgget(2), semget(2), shmget(2), stat(2)