ftok(3)

ИМЯ
ftok - преобразует путь и идентификатор проекта в ключ System V IPC

LIBRARY
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 <azamat.hackimov@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 (https://www.gnu.org/licenses/gpl-3.0.html) или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.