Manpages

名 前

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/ に 書 か れ て い る 。