スポンサーリンク

SEMGET(2) FreeBSD システムコールマニュアル SEMGET(2)

名称

semget − セマフォ ID を取得する

ライブラリ

標準 C ライブラリ (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)

FreeBSD 10.0 September 12, 1995 FreeBSD 10.0

スポンサーリンク