EN JA
FTOK(3)
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) のものと同じである。

準拠

POSIX.1-2001.

注意

libc4 と libc5 (および SunOS 4.x) では、プロトタイプは以下のようになっている。
 
key_t ftok(char * pathname , char proj_id );

現在では proj_idint だが、依然として 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.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2001-11-28 GNU