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);
解説
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 が指定されていませんでした。
September 12, 1995 | FreeBSD |