EN JA
SEMGET(2)
SEMGET(2) FreeBSD System Calls Manual SEMGET(2)

名称

semgetセマフォ ID を取得する

ライブラリ

Standard C Library (libc, -lc)

書式

#include < sys/types.h>
#include < sys/ipc.h>
#include < sys/sem.h>

int
semget( key_t key, int nsems, int flag);

解説

keyflag の値に基づき、 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)
September 12, 1995 FreeBSD