|
≫ |
|
|
|
HP OpenVMS HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)
セマフォセットを取得します。
形式
#include <sem.h>
int semget (key_t key, int nsems, int
semflg);
引数
key対応するセマフォ識別子を返すためのキー。
nsems
semid_dsデータ構造体の sem_nsems メンバの初期化の際に使用する値。詳細は,「説明」の項を参照してください。
semflg新しいセマフォに対応する
semid_dsデータ構造体の sem_perm.mode メンバの下位 9 ビットを初期化する際に使用するフラグ。詳細は,「説明」の項を参照してください。
valueセマフォに渡される初期値。この引数は,セマフォの作成時のみに使用されます。
説明
semget関数は,key に対応するセマフォ識別子を返します。
次の条件に当てはまる場合は,key に対して
semid_dsデータ構造体とそれに対応する nsems セマフォセット (
<sys/sem.h>ヘッダファイルを参照) に対するセマフォ識別子が作成されます。
- key 引数が,対応するセマフォ識別子をまだ持っておらず, (semflg &IPC_CREAT) がゼロでない場合。
作成された場合,新しいセマフォ識別子に対する
semid_dsデータ構造体は次のように初期化されます。
-
sem_perm.cuid,sem_perm.uid, sem_perm.cgid,および
sem_perm.gid は,それぞれ呼び出しプロセスの有効なユーザ ID および有効なグループ ID と等しい値に設定されます。
- sem_perm.mode の下位 9 ビットが semflg 引数の下位 9 ビットと同じ値に設定されます。
- 変数 sem_nsems が,nsems 引数値と同じ値に設定されます。
- 変数 sem_otime にゼロが設定され, sem_ctime に現在の時刻が設定されます。
- セマフォセット内の各セマフォに対応するデータ構造体は初期化の必要がありません。
semctl関数でコマンド SETVAL あるいは SETALL を使用して各セマフォを初期化することができます。
| 注意
key 引数値 IPC_PRIVATE はサポートされていません。
|
戻り値
n
|
正常終了。この関数は負でない整数のセマフォ識別子を返します。
|
- 1
|
エラーを示します。この関数は,
errno
に次のいづれかの値を設定します。
- EACCES --
key に対するセマフォ識別子は存在しますが,
semflg の下位 9 ビットで指定される操作権限が与えられていません。
- EEXIST --
key に対するセマフォ識別子は存在しますが,((semflg &IPC_CREAT) &&(semflg &IPC_EXCL)) がゼロ以外の値です。
- EFAULT -- 関数に渡された引数にアクセスできません。
- EINVAL --
nsems の値が 0 以下、あるいはシステムが課す制限を超える,あるいは
key に対するセマフォ識別子が存在するが対応するセマフォセットのセマフォの数が
nsems よりも小さいか,
nsems が 0 でありません。
- ENOENT --
key に対するセマフォ識別子が存在せず, (
semflg &IPC_CREAT) が 0 です。
- ENOSPC -- セマフォ識別子を作成すると,システムワイドでセマフォに認められている最大数を超えてしまいます。
- EVMSERR -- 変換不可能な OpenVMS エラー
|
|