other versions
FTOK(3) | Linux Programmer's Manual | FTOK(3) |
名前¶
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) のものと同じである。属性¶
マルチスレッディング (pthreads(7) 参照)¶
ftok() 関数はスレッドセーフである。準拠¶
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)この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.65 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2013-10-07 | GNU |