Provided by: manpages-ja-dev_0.5.0.0.20161015+dfsg-1_all bug

名前

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

書式

       #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.

関連項目

       sem_close(3), sem_getvalue(3), sem_post(3), sem_unlink(3), sem_wait(3), sem_overview(7)

この文書について

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