sem_open(3) 名前付きセマフォを初期化し、オープンする

書式

#include <fcntl.h> /* For O_* constants */
#include <sys/stat.h> /* For mode constants */
#include <semaphore.h>


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

-pthread とリンクする。

説明

sem_open() は、新規の POSIX セマフォを作成するか、既存のセマフォのオープンを行う。 セマフォは name で識別される。 name の構成の詳細は sem_overview(7) を参照。

oflag 引き数には、 sem_open() の動作を制御するフラグを指定する (oflag の値の定義は <fcntl.h> のインクルードにより得られる)。 oflagO_CREAT が指定されると、まだ存在しない場合にはそのセマフォが作成される。 セマフォの所有者 (ユーザ ID)、グループ所有権 (グループ ID) には、 それぞれ呼び出し元プロセスの実効 UID、実効 GID が設定される。 oflagO_CREATO_EXCL の両方が指定された場合、指定された名前 name のセマフォがすでに存在するとエラーが返される。

oflagO_CREAT を指定する場合、さらに引き数が 2 つ必要である。 mode 引き数は、 open(2) と同じように、新しいセマフォに設定されるアクセス許可 (permission) を 指定する。許可設定はプロセスの umask でマスクされる (許可ビットのシンボル定義は <sys/stat.h> のインクルードにより得られる)。 セマフォにアクセスしようとするユーザは、読み出し許可と書き込み許可の 両方を得る必要がある。 value 引き数は新しいセマフォの初期値を指定する。 O_CREAT が指定され、指定した名前 name のセマフォがすでに存在する場合、 modevalue は無視される。

返り値

成功すると、 sem_open() は新しいセマフォのアドレスを返す。 このアドレスは他のセマフォ関連の関数を呼び出す際に使用される。 エラーの場合、 sem_open() は SEM_FAILED を返し、 errno にエラーを示す値をセットする。

エラー

EACCES
そのセマフォが存在するが、呼び出し元にはそのセマフォをオープンする 許可がない。
EEXIST
oflagO_CREATO_EXCL の両方が指定されたが、 name という名前のセマフォはすでに存在する。
EINVAL
valueSEM_VALUE_MAX よりも大きい。
EINVAL
name が "/" だけで構成され、その後ろに他の文字が続いていなかった。
EMFILE
オープンされたファイル数がすでにそのプロセスにおける上限に達している。
ENAMETOOLONG
name が長すぎる。
ENFILE
オープンされたファイル総数がシステム全体での上限に達している。
ENOENT
oflagO_CREAT フラグが指定されておらず、 name という名前のセマフォも存在しない。 または、 O_CREAT が指定されたが、 name が適切な形式ではなかった。
ENOMEM
十分なメモリがない。

準拠

POSIX.1-2001.

この文書について

この man ページは Linux man-pages プロジェクトのリリース 3.65 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。