ftok -
преобразует
путь и
идентификатор
проекта в
ключ System V IPC
Standard C library (
libc,
-lc)
#include <sys/ipc.h>
key_t ftok(const char *pathname, int
proj_id);
Функция
ftok()
использует
отличительные
свойства (identity)
файла с
именем
pathname
(которое
должно
указывать
на
существующий
и
доступный
файл) и
младшие 8
бит
аргумента
proj_id (который
должен
быть не
равен нулю)
для
генерации
ключа System V IPC
key_t,
который
пригоден
для работы
с
msgget(2),
semget(2) или
shmget(2).
Возвращаемое
значение
одинаково
для всех
имён,
указывающих
на один и
тот же файл
при
одинаковом
значении
proj_id.
Возвращаемое
значение
будет
отличаться,
когда
(одновременно
существующие)
файлы или
идентификаторы
проекта
различаются.
При
успешном
выполнении
возвращается
сгенерированное
значение
key_t.
При ошибке
возвращается
-1, а в
переменную
errno
записывается
код ошибки
согласно
системному
вызову
stat(2).
Описание
терминов
данного
раздела
смотрите в
attributes(7).
Интерфейс |
Атрибут |
Значение |
ftok() |
Безвредность
в нитях |
MT-Safe |
POSIX.1-2001, POSIX.1-2008.
В
некоторых
старых
системах
прототип
выглядел
как:
key_t ftok(char *pathname, char proj_id);
В наши дни
proj_id имеет
тип
int, хотя,
как
правило,
по-прежнему
из него
используется
только 8 бит.
Обычно, при
вызове
этой
функции в
качестве
proj_id
передаётся
символ ASCII,
именно
поэтому
поведение
функции
считается
не
определённым,
если
proj_id
равен нулю.
Естественно,
не
гарантируется,
что
возвращаемый
key_t уникален.
Обычно
производится
объединение
указанного
байта
proj_id с
младшими 16
битами
номера inode и
младшими 8
битам
номера
устройства
в 32-битный
результат.
Легко
могут
возникать
повторения,
например
между
файлами на
/dev/hda1 и
файлами на
/dev/sda1.
See
semget(2).
msgget(2),
semget(2),
shmget(2),
stat(2),
sysvipc(7)
Русский
перевод
этой
страницы
руководства
был сделан
Azamat Hackimov <
[email protected]>, Dmitry Bolkhovskikh
<
[email protected]>, Yuri Kozlov <
[email protected]> и
Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]