Provided by:
manpages-ja-dev_0.5.0.0.20070415-1_all 
前
ftok - パス名とプロジェクト識別子を System V IPC ァ爾吠儡垢垢
式
# include <sys/types.h>
# include <sys/ipc.h>
key_t ftok(const char *pathname, int proj_id);
明
ftok() 関数は pathname で与えられたファイル
(存在し、アクセス可能でなければならない) のファイル名の識別情報 (iden-
tity) と、 proj_id (0 であってはならない) の低位 8 ビットとを用いて、
key_t 型の System V IPC ァ爾鮴言する。 このァ爾 msgget(2), semget(2),
shmget(2) などでの利用に適している。
同じファイルを示すあらゆるパス名と、同じ proj_id
に対しては、結果の値は等しくなる。 ファイルが違ったり
(この場合両者は同時に存在しているはず)、 proj_id
が異なると、返り値も異なる。
値
成功した場合は生成された key_t の値が返される。 失敗すると -1
が返され、エラーの内容が errno に書すまれる。この内容はシステムコール
stat(2) のものと同じである。
拠
POSIX.1-2001.
意
libc4 と libc5 (および SunOS 4.x) では、 プロトタイプは
key_t ftok(char *pathname, char proj_id);
である。 現在では proj_id は int だが、依然として 8
ビットしか用いられない。 通常は ASCII ゥ礇薀タが proj_id
に用いられる。 proj_id が 0 のと-
の振る舞いが未定義になっているのは、これが理由である。
もちろん key_t が他と重ならないものであるかどうかは保証されない。
最善の場合の組み合わせを考えても、 proj_id の 1 バイト、i
ノード番号の低位 16 ビット、および デバイス番号の低位 8
ビットなので、結果は 32 ビットに過ぎない。 例えば /dev/hda1 と
/dev/sda1 それぞれにあるファイルに対して、衝突は容易に起こりうる。
msgget(2), semget(2), shmget(2), stat(2), svipc(7)