Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all
名前
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> のインクルードにより得られる)。 oflag に O_CREAT が指定されると、まだ存在しない 場合にはそのセマフォが作成される。 セマフォの所有者 (ユーザー ID)、グループ所有権 (グルー プ ID) には、 それぞれ呼び出し元プロセスの実効 UID、実効 GID が設定される。 oflag に O_CREAT と O_EXCL の両方が指定された場合、指定された名前 name のセマフォがすでに存在すると エラーが返される。 oflag に O_CREAT を指定する場合、さらに引数が 2 つ必要である。 mode 引数は、 open(2) と同 じように、新しいセマフォに設定されるアクセス許可 (permission) を 指定する。許可設定はプロ セスの umask でマスクされる (許可ビットのシンボル定義は <sys/stat.h> のインクルードにより 得られる)。 セマフォにアクセスしようとするユーザーは、読み出し許可と書き込み許可の 両方を 得る必要がある。 value 引数は新しいセマフォの初期値を指定する。 O_CREAT が指定され、指定し た名前 name のセマフォがすでに存在する場合、 mode と value は無視される。
返り値
成功すると、 sem_open() は新しいセマフォのアドレスを返す。 このアドレスは他のセマフォ関連 の関数を呼び出す際に使用される。 エラーの場合、 sem_open() は SEM_FAILED を返し、 errno にエラーを示す値をセットする。
エラー
EACCES そのセマフォが存在するが、呼び出し元にはそのセマフォをオープンする 許可がない。 EEXIST oflag に O_CREAT と O_EXCL の両方が指定されたが、 name という名前のセマフォはすでに 存在する。 EINVAL value が SEM_VALUE_MAX よりも大きい。 EINVAL name が "/" だけで構成され、その後ろに他の文字が続いていなかった。 EMFILE オープンされたファイルディスクリプターの総数がプロセス単位の上限に達している。 ENAMETOOLONG name が長すぎる。 ENFILE オープンされたファイル総数がシステム全体での上限に達している。 ENOENT oflag に O_CREAT フラグが指定されておらず、 name という名前のセマフォも存在しない。 または、 O_CREAT が指定されたが、 name が適切な形式ではなかった。 ENOMEM 十分なメモリーがない。
属性
この節で使用されている用語の説明については、 attributes(7) を参照。 ┌─────────────────┬───────────────┬─────────┐ │インターフェース │ 属性 │ 値 │ ├─────────────────┼───────────────┼─────────┤ │sem_open() │ Thread safety │ MT-Safe │ └─────────────────┴───────────────┴─────────┘
準拠
POSIX.1-2001, POSIX.1-2008.
関連項目
sem_close(3), sem_getvalue(3), sem_post(3), sem_unlink(3), sem_wait(3), sem_overview(7)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの 説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。