ftok - преобразовывает имя файла и идентификатор проекта в ключ для системных вызовов
НАЗВАНИЕftok - преобразовывает имя файла и идентификатор проекта в
ключ для системных вызовов
СИНТАКСИС
# include
# include
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.