名 前
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 十 分 な メ モ リ ー が な い 。 |
準 拠
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/ に 書 か れ て い る 。