SEM_OPEN(3) | Linux Programmer's Manual | SEM_OPEN(3) |
名前
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 );
説明
sem_open() は、新規の POSIX セマフォを作成するか、既存のセマフォのオープンを行う。セマフォは name で識別される。 name の構成の詳細は sem_overview(7) を参照。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
- 十分なメモリがない。
準拠
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.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2012-05-13 | Linux |