sem_open サブルーチン

目的

名前付きセマフォーを初期化して開きます。

ライブラリー

標準 C ライブラリー (libc.a)

構文

#include <semaphore.h>

sem_t * sem_open (const char *name, int oflag, mode_t mode, unsigned value)

説明

sem_open サブルーチンは、名前付きセマフォーとプロセスの間の接続を確立します。 セマフォー名 nameを指定した sem_open サブルーチンの呼び出しの後、プロセスは、呼び出しから戻されたアドレスを使用してセマフォーを参照することができます。 このセマフォーは、 sem_waitsem_trywaitsem_post、および sem_close サブルーチンへの後続の呼び出しで使用することができます。 セマフォーは、 sem_close_exit、または exec サブルーチンの 1 つの呼び出しによってセマフォーが正常にクローズされるまで、このプロセスで使用できます。

name パラメーターは、セマフォー・オブジェクトに名前を付けるストリングを指します。 この名前は、ファイル・システムには表示されません。 name パラメーターは、パス名の作成規則に従います。 スラッシュ文字で始まり、少なくとも 1 文字が含まれている必要があります。 name の同じ値を使用して sem_open () を呼び出すプロセスは、その名前が除去されていない限り、同じセマフォー・オブジェクトを参照します。

プロセスが name パラメーターの同じ値を使用して sem_open サブルーチンに対して複数の呼び出しを成功させると、このセマフォーの sem_unlink サブルーチンへの呼び出しがなければ、成功した呼び出しごとに同じセマフォー・アドレスが戻されます。

パラメーター

項目 説明
name セマフォー・オブジェクトを指定するストリングを指します。
oflag セマフォーが作成されるか、 sem_open サブルーチンの呼び出しによって単にアクセスされるかを制御します。 oflag パラメーターには、以下のフラグ・ビットを設定することができます。
O_CREAT
このフラグは、セマフォーがまだ存在しない場合にセマフォーを作成するために使用されます。 O_CREAT フラグが設定され、セマフォーが既に存在する場合、 O_EXCL フラグの説明に記載されている場合を除き、 O_CREAT フラグは無効です。 それ以外の場合、 sem_open サブルーチンは名前付きセマフォーを作成します。 O_CREAT フラグには、3 番目と 4 番目のパラメーター mode(タイプ mode_t) および valueが必要です。 これは unsigned型です。 セマフォーは、初期値 valueを使用して作成されます。 セマフォーの有効な初期値は、 SEM_VALUE_MAXより小さいか等しい値です。

セマフォーのユーザー ID は、プロセスの有効ユーザー ID に設定されます。 セマフォーのグループ ID は、プロセスの実効グループ ID に設定されます。 セマフォーの許可ビットは、プロセスのファイル・モード作成マスクに設定されている許可ビットを除き、 mode パラメーターの値に設定されます。 ファイル許可ビット以外のモードのビットが設定されている場合、それらのビットは効果がありません。 ファイル許可ビット以外のモードのビットが設定されている場合、それらのビットは効果がありません。

name という名前のセマフォーが、 O_CREAT フラグを指定した sem_open サブルーチンによって作成された後、 他のプロセスは、 nameの同じ値を使用して sem_open サブルーチンを呼び出すことによって、セマフォーに接続することができます。

O_EXCL
O_EXCL および O_CREAT フラグが設定されている場合、セマフォー名が存在すると、 sem_open サブルーチンは失敗します。 セマフォーが存在するかどうかの検査、およびセマフォーが存在しない場合のセマフォーの作成は、 O_EXCL フラグおよび O_CREAT フラグが設定された sem_open サブルーチンを実行する他のプロセスに関してアトミックです。 O_EXCL が設定され、 O_CREAT が設定されていない場合、 O_EXCL は無視されます。 O_CREAT および O_EXCL 以外のフラグを oflag パラメーターに指定しても、効果はありません。
モード ファイル許可ビットの値を指定します。 O_CREAT と一緒に使用して、メッセージ・キューを作成します。
VALUE 初期値を指定します。 O_CREAT と一緒に使用して、メッセージ・キューを作成します。

戻り値

正常終了すると、 sem_open サブルーチンはセマフォーのアドレスを戻します。 それ以外の場合は、 SEM_FAILED の値を戻し、エラーを示すために errno を設定します。 SEM_FAILED シンボルは、 semaphore.h ヘッダー・ファイルに定義されています。 sem_open サブルーチンからの正常な戻りは、値 SEM_FAILEDを戻しません。

エラー・コード

以下のいずれかの条件が発生した場合、 sem_open サブルーチンは SEM_FAILED を戻し、 errno を対応する値に設定します。
項目 説明
EACCES 指定されたセマフォーが存在し、 oflag で指定された許可は拒否されます。
EEXIST O_CREAT フラグと O_EXCL フラグが設定され、指定されたセマフォーは既に存在します。
EFAULT ユーザー・アドレスが無効です。
EINVAL sem_open サブルーチンは、指定された名前に対してサポートされていません。 または、 oflag パラメーターに O_CREAT フラグが指定され、 SEM_VALUE_MAXより大きかった。
EMFILE このプロセスで現在使用されているセマフォー記述子が多すぎます。
ENAMETOOLONG name パラメーターの長さが PATH_MAXを超えているか、パス名コンポーネントが NAME_MAXより長くなっています。
ENFILE システムで現在オープンしているセマフォーが多すぎます。
ENOENT O_CREAT フラグは設定されず、指定されたセマフォーは存在しません。
ENOMEM 必要な操作のためのメモリーが不足しています。
ENOTSUP この機能は、チェックポイント再始動されたプロセスではサポートされません。
ENOSPC 新しい名前付きセマフォーを作成するための十分なスペースがありません。