ftok - przekształca ścieżkę i identyfikator projektu
na klucz komunikacji międzyprocesowej (IPC) Systemu V
Standardowa biblioteka C (
libc,
-lc)
#include <sys/ipc.h>
key_t ftok(const char *pathname, int
proj_id);
Funkcja
ftok() wykorzystuje tożsamość pliku o nazwie
podanej w
pathname (która musi odnosić się do
istniejącego, dostępnego pliku) oraz 8 najmniej
znaczących bitów
proj_id (które muszą
stanowić wartość niezerową) do wygenerowania
klucza komunikacji międzyprocesowej Systemu V typu
key_t
odpowiedniego do używania w
msgget(2),
semget(2) lub
shmget(2).
Wartość wynikowa jest taka sama dla wszystkich
ścieżek określających nazwy tego samego pliku, o
ile użyje się tej samej wartości
proj_id. Zwracane
wartości powinny się różnić, gdy
różnią się (istniejące jednocześnie)
pliki lub identyfikatory projektu.
W przypadku powodzenia zwracana jest wygenerowana wartość
key_t. W przypadku błędu zwracane jest -1, a
errno
wskazuje błąd taki sam, jak dla funkcji systemowej
stat(2).
Informacje o pojęciach używanych w tym rozdziale można
znaleźć w podręczniku
attributes(7).
Interfejs |
Atrybut |
Wartość |
ftok() |
Bezpieczeństwo wątkowe |
MT-Safe |
POSIX.1-2001, POSIX.1-2008.
Niektóre historyczne systemy używały
następującego prototypu:
key_t ftok(char *pathname, char proj_id);
Obecnie
proj_id jest typu
int, ale nadal używanych jest
tylko 8 bitów. Typowe zastosowanie polega na umieszczeniu znaku ASCII w
proj_id i dlatego mówi się, że zachowanie jest
nieokreślone, gdy
proj_id jest zerem.
Oczywiście nie można dać gwarancji, że otrzymany
key_t jest niepowtarzalny. Zazwyczaj dla uzyskania najlepszego wyniku w
32-bitową liczbę łączone są: podany bajt
proj_id, 16 mniej znaczących bitów numeru
i-węzła oraz 8 niższych bitów numeru
urządzenia. Kolizje mogą łatwo wystąpić, na
przykład pomiędzy plikami na
/dev/hda1 i plikami na
/dev/sda1.
See
semget(2).
msgget(2),
semget(2),
shmget(2),
stat(2),
sysvipc(7)
Autorami polskiego tłumaczenia niniejszej strony podręcznika
są: Andrzej Krzysztofowicz <
[email protected]> i Robert
Luberda <
[email protected]>
Niniejsze tłumaczenie jest wolną dokumentacją.
Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z
GNU
General Public License w wersji 3 lub nowszej. Nie przyjmuje się
ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy
zgłaszać na adres listy dyskusyjnej
[email protected]