ftok -
パス名とプロジェクト識別子を
System V IPC キーに変換する
#include <sys/types.h>
#include <sys/ipc.h>
key_t ftok(const char *pathname, int
proj_id);
ftok() 関数は
pathname
で与えられたファイル
(存在し、アクセス可能でなければならない)
のファイル名の識別情報
(identity) と、
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)
のものと同じである。
この節で使用されている用語の説明については、
attributes(7) を参照。
インターフェース |
属性 |
値 |
ftok() |
Thread safety |
MT-Safe |
POSIX.1-2001, POSIX.1-2008.
いくつかの古いシステムでは、プロトタイプは以下のようになっていた。
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
それぞれにあるファイルに対して、衝突は容易に起こりうる。
semget(2) を参照。
msgget(2),
semget(2),
shmget(2),
stat(2),
sysvipc(7)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。