Manpages

名 前

shm_open, shm_unlink − POSIX 共 有 メ モ リ ー オ ブ ジ ェ ク ト の 作 成 /オ ー プ ン /削 除 を 行 う

書 式

#include <sys/mman.h>
#include <sys/stat.h>
/* mode 定 数 用 */
#include <fcntl.h>
/* O_* 定 数 の 定 義 用 */

int shm_open(const char *name, int oflag, mode_t mode);

int shm_unlink(const char *name);

−lrt で リ ン ク す る 。

説 明

shm_open() は 、 POSIX 共 有 メ モ リ ー オ ブ ジ ェ ク ト を 新 規 に 作 成 /オ ー プ ン し た り 、 す で に 存 在 す る オ ブ ジ ェ ク ト を オ ー プ ン し た り す る 。 POSIX 共 有 メ モ リ ー オ ブ ジ ェ ク ト は 、 実 際 に は 、 関 係 の な い プ ロ セ ス が 共 有 メ モ リ ー の 同 じ 領 域 を mmap(2) す る た め に 使 用 す る こ と が で き る 手 段 で あ る 。 shm_unlink() は 、 逆 の 操 作 、 つ ま り 以 前 に shm_open() で 作 成 さ れ た オ ブ ジ ェ ク ト の 削 除 を 行 う 。

shm_open() の 動 作 は open(2) と よ く 似 て い る 。 name で 作 成 し た り オ ー プ ン し た り す る 共 有 メ モ リ ー オ ブ ジ ェ ク ト を 指 定 す る 。 移 植 性 を 持 た せ る た め に は 、 共 有 メ モ リ ー オ ブ ジ ェ ク ト は /somename と い う 形 式 の 名 前 で 識 別 し 、 そ の 名 前 は 、 最 大 で NAME_MAX (す な わ ち 255) 文 字 の ヌ ル 終 端 さ れ た 文 字 列 で 、 ス ラ ッ シ ュ で 始 ま り 、 ス ラ ッ シ ュ 以 外 の 文 字 が 1 文 字 以 上 続 く 形 式 に す べ き で あ る 。

oflag は ビ ッ ト マ ス ク で 、 O_RDONLYO_RDWR の い ず れ か 一 方 と 、 以 下 に 述 べ る 他 の フ ラ グ の 論 理 和 を と っ た も の を 指 定 す る 。

O_RDONLY 読 み 出 し ア ク セ ス 用 に オ ブ ジ ェ ク ト を オ ー プ ン す る 。 こ の フ ラ グ を 指 定 し て オ ー プ ン さ れ た 共 有 メ モ リ ー オ ブ ジ ェ ク ト は 、 読 み 出 し

(PROT_READ) ア ク セ ス で の み mmap(2) す る こ と が で き る 。

O_RDWR 読 み 書 き ア ク セ ス 用 に オ ブ ジ ェ ク ト を オ ー プ ン す る 。

O_CREAT 存 在 し な い 場 合 、 共 有 メ モ リ ー オ ブ ジ ェ ク ト を 作 成 す る 。 オ ブ ジ ェ ク ト の ユ ー ザ ー と グ ル ー プ の 所 有 権 は 、 呼 び 出 し 元 プ ロ セ ス の 対 応 す る 実 効

ID が 使 わ れ 、 オ ブ ジ ェ ク ト の 許 可 ビ ッ ト は mode の 下 位 9 ビ ッ ト に 基 づ い て 設 定 さ れ る 。 た だ し 、 フ ァ イ ル モ ー ド 作 成 マ ス ク (umask(2) 参 照 ) に 設 定 さ れ て い る 値 は 、 新 規 オ ブ ジ ェ ク ト に 関 し て は ク リ ア さ れ る 。 mode を 定 義 す る た め に 使 用 で き る マ ク ロ 定 数 (群 )は open(2) に 記 載 さ れ て い る (こ れ ら の 定 数 の シ ン ボ ル 定 義 は <sys/stat.h> の イ ン ク ル ー ド に よ り 得 ら れ る )。 新 規 に 作 成 さ れ た 共 有 メ モ リ ー オ ブ ジ ェ ク ト は 長 さ 0 で 初 期 化 さ れ る 。 オ ブ ジ ェ ク ト の 大 き さ は ftruncate(2) を 使 っ て 設 定 で き る 。 共 有 メ モ リ ー オ ブ ジ ェ ク ト と し て 新 規 に 確 保 さ れ た バ イ ト は 自 動 的 に 0 に 初 期 化 さ れ る 。

O_EXCL

O_CREAT が 一 緒 に 指 定 さ れ て お り 、 name で 指 定 さ れ た 共 有 メ モ リ ー オ ブ ジ ェ ク ト が 既 に 存 在 し た 場 合 、 エ ラ ー を 返 す 。 オ ブ ジ ェ ク ト の 存 在 確 認 と 、 存 在 し な か っ た 場 合 の オ ブ ジ ェ ク ト 作 成 は 、 必 ず 一 連 の 操 作 と し て 実 行 さ れ る (performed atomically)。

O_TRUNC

共 有 メ モ リ ー オ ブ ジ ェ ク ト が す で に 存 在 し た 場 合 、 そ の オ ブ ジ ェ ク ト を 0 バ イ ト に 切 り 詰 め る 。 こ れ ら の フ ラ グ 値 の 定 義 は <fcntl.h> の イ ン ク ル ー ド に よ り 得 ら れ る 。 成 功 し て 完 了 し た 場 合 、 shm_open() は 共 有 メ モ リ ー オ ブ ジ ェ ク ト を 参 照 す る 新 し い フ ァ イ ル デ ィ ス ク リ プ タ ー を 返 す 。 こ の フ ァ イ ル デ ィ ス ク リ プ タ ー は 、 そ の プ ロ セ ス 内 で 過 去 に オ ー プ ン さ れ て い な い フ ァ イ ル デ ィ ス ク リ プ タ ー の 中 で 最 も 小 さ な 数 に な る こ と が 保 証 さ れ る 。 FD_CLOEXEC フ ラ グ (fcntl(2) を 参 照 ) が 、 こ の フ ァ イ ル デ ィ ス ク リ プ タ ー に 設 定 さ れ る 。 通 常 、 こ れ ら の フ ァ イ ル デ ィ ス ク リ プ タ ー は 、 こ の 後 続 け て 実 行 さ れ る ftruncate(2) (新 規 に 作 成 さ れ た オ ブ ジ ェ ク ト の 場 合 の み ) と mmap(2) の 呼 び 出 し に 使 用 さ れ る 。 mmap(2) を 呼 び 出 し た 後 は 、 フ ァ イ ル デ ィ ス ク リ プ タ ー を ク ロ ー ズ し て も よ く 、 ク ロ ー ズ し て も メ モ リ ー マ ッ ピ ン グ に 影 響 を 与 え る こ と は な い 。

shm_unlink() の 動 作 は unlink(2) と よ く 似 て い る : 共 有 メ モ リ ー オ ブ ジ ェ ク ト 名 を 削 除 し 、 す べ て の プ ロ セ ス が 処 理 対 象 の オ ブ ジ ェ ク ト を ア ン マ ッ プ し た 時 点 で オ ブ ジ ェ ク ト の 割 り 当 て を 解 除 し 、 対 応 す る メ モ リ ー 領 域 の 内 容 を 破 棄 す る 。 shm_unlink() が 成 功 し た 後 で 、 同 じ name を 持 つ オ ブ ジ ェ ク ト に 対 し て shm_open() を 行 う と 、 (O_CREAT が 指 定 さ れ て い な い 場 合 ) 失 敗 す る 。 (O_CREAT が 指 定 さ れ て い る 場 合 、 新 し く 別 の オ ブ ジ ェ ク ト が 作 成 さ れ る )。

返 り 値

成 功 し た 場 合 、 shm_open() は 非 負 の フ ァ イ ル デ ィ ス ク リ プ タ ー を 返 す 。 失 敗 し た 場 合 、 shm_open() は −1 を 返 す 。 shm_unlink() は 、 成 功 し た 場 合 0 を 、 エ ラ ー が 起 こ っ た 場 合 −1 を 返 す 。

エ ラ ー

失 敗 し た 場 合 、 エ ラ ー の 原 因 を 示 す た め errno が 設 定 さ れ る 。 errno に 設 定 さ れ る 値 は 以 下 の 通 り で あ る :

EACCES 共 有 メ モ リ ー オ ブ ジ ェ ク ト を

shm_unlink() す る 権 限 が な か っ た 。

EACCES 指 定 さ れ た

modenameshm_open() す る 権 限 が な か っ た 。 も し く は 、 O_TRUNC が 指 定 さ れ た が 、 呼 び 出 し 元 に は そ の オ ブ ジ ェ ク ト に 対 す る 書 き 込 み 権 限 が な か っ た 。

EEXIST

O_CREATO_EXCL の 両 方 が shm_open() に 指 定 さ れ た が 、 name で 指 定 さ れ た 共 有 メ モ リ ー オ ブ ジ ェ ク ト が 既 に 存 在 し た 。

EINVAL

shm_open() に 与 え ら れ た name 引 き 数 が 不 正 で あ っ た 。

EMFILE

プ ロ セ ス が オ ー プ ン 可 能 な フ ァ イ ル 数 の 上 限 に す で に 達 し て い た 。

ENAMETOOLONG

name の 長 さ が PATH_MAX を 越 え て い る 。

ENFILE フ ァ イ ル シ ス テ ム で オ ー プ ン で き る フ ァ イ ル 数 の 上 限 に 達 し た 。

ENOENT 存 在 し て い な い

name の オ ブ ジ ェ ク ト を shm_open() し よ う と し た が 、 O_CREAT が 指 定 さ れ て い な か っ た 。

ENOENT 存 在 し な い

name の オ ブ ジ ェ ク ト を shm_unlink() し よ う と し た 。

バ ー ジ ョ ン

こ れ ら の 関 数 は glibc 2.2 以 降 で 提 供 さ れ て い る 。

準 拠

POSIX.1−2001.

POSIX.1−2001 に は 、 新 規 に 作 成 さ れ る 共 有 メ モ リ ー オ ブ ジ ェ ク ト の グ ル ー プ 所 有 権 は 、 呼 び 出 し 元 プ ロ セ ス の 実 効 グ ル ー プ ID か 「 シ ス テ ム の デ フ ォ ル ト の グ ル ー プ ID」 の ど ち ら か に 設 定 さ れ る 、 と 書 か れ て い る 。

注 意

POSIX は O_RDONLYO_TRUNC が 一 緒 に 指 定 さ れ た 場 合 の 動 作 を 未 定 義 に し て い る 。 Linux で は 、 既 存 の 共 有 メ モ リ ー オ ブ ジ ェ ク ト に 対 す る 切 り 詰 め (truncate) は 成 功 す る 。 し か し 、 他 の UNIX シ ス テ ム で も 同 じ で あ る と は 限 ら な い 。

Linux 2.4 に お け る POSIX 共 有 メ モ リ ー オ ブ ジ ェ ク ト の 実 装 は 専 用 の フ ァ イ ル シ ス テ ム を 使 用 す る 。 そ の フ ァ イ ル シ ス テ ム は 通 常 /dev/shm に マ ウ ン ト さ れ る 。

関 連 項 目

close(2), fchmod(2), fchown(2), fcntl(2), fstat(2), ftruncate(2), memfd_create(2), mmap(2), open(2), umask(2), shm_overview(7)

こ の 文 書 に つ い て

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