|
Синтаксис
# 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. Возвращаемое значение должно отличаться, когда (одновременно существующие) файлы или идентификаторы проекта различаются. |
Возвращаемое значение
При успешном выполнении ftok возвращает значение созданного ключа key_t. при ошибках выполнения возвращает -1 и устанавливает errno. |
Замечания
В 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. |