名 前
mkstemp, mkostemp, mkstemps, mkostemps − 他 と 重 な ら な い 名 前 を 持 つ 一 時 フ ァ イ ル を 作 成 す る
書 式
#include <stdlib.h>
int mkstemp(char *template);
int mkostemp(char *template, int flags);
int mkstemps(char *template, int suffixlen);
int mkostemps(char *template, int suffixlen, int flags);
glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):
mkstemp():
_BSD_SOURCE || _SVID_SOURCE ||
_XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
|| /* Since glibc 2.12: */
_POSIX_C_SOURCE >= 200112L
mkostemp():
_GNU_SOURCE
mkstemps(): _BSD_SOURCE || _SVID_SOURCE
mkostemps(): _GNU_SOURCE
説 明
関 数 mkstemp() は 引 数 template か ら 他 と 重 な ら な い 一 時 フ ァ イ ル 名 を 生 成 し 、 そ の フ ァ イ ル の 作 成 と オ ー プ ン を 行 い 、 そ の フ ァ イ ル に 対 す る オ ー プ ン 済 み の フ ァ イ ル デ ィ ス ク リ プ タ ー を 返 す 。 引 数 template で 指 示 す る 文 字 列 の 後 ろ の 6 文 字 は XXXXXX で あ る 必 要 が あ る 。 こ の 部 分 が フ ァ イ ル 名 を 他 と 重 な ら な い よ う に す る 文 字 で 置 き 換 え ら れ る 。 template は 書 き 換 え ら れ る た め 、 文 字 列 定 数 で は な く 文 字 配 列 と し て 宣 言 す る よ う に し な け れ ば な ら な い 。 フ ァ イ ル は 許 可 モ ー ド 0600 で 作 成 さ れ 、 所 有 者 の み が 読 み 書 き 可 能 で あ る 。 返 さ れ る フ ァ イ ル デ ィ ス ク リ プ タ ー で 、 こ の フ ァ イ ル へ の 読 み 書 き 両 方 の ア ク セ ス が 可 能 で あ る 。 呼 び 出 し 者 が そ の フ ァ イ ル を 作 成 す る プ ロ セ ス で あ る こ と を 保 証 す る た め に 、 フ ァ イ ル は open(2) の O_EXCL フ ラ グ 付 き で オ ー プ ン さ れ る 。
mkostemp() 関 数 は mkstemp() と 同 様 だ が 、 flags に O_APPEND, O_CLOEXEC, O_SYNC の ビ ッ ト を 指 定 で き る 点 が 異 な る (意 味 は open(2) と 同 じ で あ る )。 フ ァ イ ル を 作 成 す る 際 、 mkostemp() は open(2) に 渡 す flags 引 き 数 に O_RDWR, O_CREAT, O_EXCL を 含 め る 。 そ の た め 、 mkostemp() に 渡 す flags 引 き 数 に こ れ ら の 値 を 含 め る 必 要 は な く 、 シ ス テ ム に よ っ て は エ ラ ー が 発 生 す る 点 に 注 意 す る こ と 。
mkstemps() 関 数 は mkstemp() と 同 様 だ が 、 template 内 の 文 字 列 に 長 さ が suffixlen 文 字 の 接 尾 辞 (suffix) が 含 ま れ る 点 が 異 な る 。 し た が っ て 、 template は prefixXXXXXXsuffix の 形 式 と な る 。 文 字 列 XXXXXX の 部 分 は mkstemp() に よ り 更 新 さ れ る 。
mkostemps() と mkstemps() の 関 係 は 、 mkostemp() と mkstemp() の 関 係 と 同 じ で あ る 。
返 り 値
成 功 す る と 、 こ れ ら の 関 数 は 一 時 フ ァ イ ル の フ ァ イ ル デ ィ ス ク リ プ タ ー を 返 す 。 エ ラ ー の 場 合 は 、 −1 を 返 し 、 errno を 適 切 に 設 定 す る 。
エ ラ ー
EEXIST す で に 同 じ 名 前 を 持 つ フ ァ イ ル が 存 在 し た 。 |
template の 内 容 は 不 定 で |
あ る 。
EINVAL |
mkstemp() と mkostemp() の 場 合 : template の 最 後 の 6 文 字 が XXXXXX で な か っ た 。 こ の 場 合 、 template は 変 更 さ れ な い 。 |
mkstemps() と mkostemps() の 場 合 : template の 長 さ が (6 + suffixlen) 文 字 よ り 短 い 、 ま た は template の 接 尾 辞 の 直 前 の 6 文 字 が XXXXXX で は な か っ た 。 こ れ ら の 関 数 は open(2) に 書 か れ て い る エ ラ ー の い ず れ か で 失 敗 す る こ と も あ る 。
バ ー ジ ョ ン
mkostemp() は glibc 2.7 以 降 で 利 用 で き る 。 mkstemps() と mkostemps() は glibc 2.11 以 降 で 利 用 で き る 。
属 性
マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 ) 関 数 mkstemp(), mkostemp(), mkstemps(), mkostemps() は ス レ ッ ド セ ー フ で あ る 。
準 拠
mkstemp(): 4.3BSD, POSIX.1−2001.
mkstemps(): 標 準 化 さ れ て い な い が 、 他 の い く つ か の シ ス テ ム に も 存 在 す る 。
mkostemp() と mkostemps(): glibc に よ る 拡 張 。
注 意
glibc バ ー ジ ョ ン 2.06 以 前 で は 、 フ ァ イ ル は 許 可 モ ー ド 0666 で 作 成 さ れ 、 全 て の ユ ー ザ ー が 読 み 書 き 可 能 で あ っ た 。 こ の 古 い 動 作 は 、 セ キ ュ リ テ ィ 上 の リ ス ク に な り 得 る 。 特 に 、 他 の UNIX で は 許 可 モ ー ド と し て 0600 を 使 う た め 、 プ ロ グ ラ ム を 移 植 す る 際 、 こ の 細 か な 違 い を 見 落 と す 可 能 性 が あ る か ら だ 。 POSIX.1−2008 で は 、 フ ァ イ ル を 許 可 モ ー ド 0600 で 作 成 す る こ と が 必 須 要 件 と し て 追 加 さ れ た 。 よ り 一 般 的 に は 、 mkstemp() の POSIX 規 定 で は フ ァ イ ル モ ー ド に つ い て 何 も 述 べ て い な い 。 従 っ て 、 ア プ リ ケ ー シ ョ ン は mkstemp() (や mkostemp()) を 呼 び 出 す 前 に フ ァ イ ル モ ー ド 生 成 マ ス ク (umask(2) 参 照 ) が 適 切 に 設 定 さ れ て い る か 確 認 す る べ き で あ る 。
関 連 項 目
mkdtemp(3), mktemp(3), tempnam(3), tmpfile(3), tmpnam(3)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。