Функция
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.