SEMGET(2)

名称
semget - セマフォ ID を取得する

ライブラリ
libc

書式
<sys/types.h> <sys/ipc.h> <sys/sem.h> int semget(key_t key, int nsems, int flag)

解説
key と flag の値に基づき、 semget() は新たに作成された、あるいは 以前から存在するセマフォ集合の識別子を返します。 キーはファイル名に類似しています。 キーは IPC オブジェクトに名前を付けるハンドルを提供します。 キーを指定する方法は 3 つあります:

•   IPC_PRIVATE を指定できます。 この場合、新しい IPC オブジェクトが作成されます。

•   整数定数を指定できます。 key に対応する IPC オブジェクトが指定されておらず、 しかも IPC_CREAT ビットを flag 引数で設定している場合、新しい IPC オブジェクトが作成されます。

•   ftok(3) 関数を使用して、パス名からキーを生成できます。

新しく作成される IPC オブジェクトのモードは、次の定数の論理和 ( OR ) を flag 引数に設定することで決定されます:

SEM_R
    ユーザ用の読取りアクセス

SEM_A
    ユーザ用の書換えアクセス

(SEM_R>>3)
    グループ用の読取りアクセス

(SEM_A>>3)
    グループ用の書換えアクセス

(SEM_R>>6)
    その他用の読取りアクセス

(SEM_A>>6)
    その他用の書換えアクセス

新しいセマフォ集合が作成されている場合、 nsems を使用して、集合の中に入れる必要のあるセマフォの数を示します。 そうでない場合、 nsems を 0 として指定できます。

戻り値
semget() システムコールは、正常に完了するとセマフォ集合の識別子を返します。 そうでない場合は、-1 を返し、エラーを示すように errno を設定します。

エラー
semget() システムコールは次の場合に処理に失敗します:

[EACCES]
    アクセスパーミッション障害。

[EEXIST]
    IPC_CREAT および IPC_EXCL が指定されているのに、 key に対応するセマフォ集合が既に存在します。

[EINVAL]
    要求されたセマフォの数が、 システムが集合単位で課している最大値を超過しています。

[ENOSPC]
    利用可能なセマフォが不足しています。

[ENOSPC]
    カーネルが struct semid_ds を割り当てられませんでした。

[ENOENT]
    key に対応するセマフォ集合が見つからず、その際に IPC_CREAT が指定されていませんでした。

関連項目
semctl(2), semop(2), ftok(3)