mkstemp - ライブラリコールの説明 - Linux コマンド集 一覧表
名前
mkstemp - 他と重ならない名前を持つテンポラリファイルを作成する
書式
#include <stdlib.h>
int mkstemp(char *template);
説明
関数 mkstemp () は引数 template から他と重ならない テンポラリファイル名を作成する。引数 template で指示する文字列 の後ろの 6 文字は XXXXXX である必要がある。この部分がファイル名を他と重ならない ようにする文字で置き換えられる。ファイルはアクセスモードがリード/ライト、 そして許可モードが0666 (glibc 2.0.6 及びそれ以前の場合)、 0600 (glibc 2.0.7 及びそれ以降)で作成される。 template は書き換えられるため、文字列定数ではなく文字配列として宣言するようにしなければならない。 mkstemp ()が正常終了する時は、われわれが唯一のユーザーであることを保証するために、 テンポラリファイルは open (2) の O_EXCL 属性でオープンされる。
返り値
成功すると、関数 mkstemp () はテンポラリファイルの ファイルディスクリプタを返す。エラーの場合は、-1 を返し、 errno を適切に設定する。
エラー
- EEXIST
- すでに同じ名前を持つファイルが存在した。 template の内容は不定である。
- EINVAL
- 引数 template で指示された文字配列の後ろの 6 文字が XXXXXX でない。 template の内容は変化しない。
注意
古い動作(許可モード 0666 でファイルを作成する)はセキュリティ上のリスク
になる場合がある。特に他の Unix では許可モードとして 0600 を使うため、
プログラムを移植する際、この細かな違いを見落とす可能性が
あるからだ。
より一般的には、POSIX 規定ではファイルモードについて何も述べていない。
従って、アプリケーションは
mkstemp
()を呼び出す前に umask が適切に設定されているか確認するべきである。
準拠
4.3BSD, POSIX.1-2001
備考
libc4, libc5, glibc1 でのプロトタイプ宣言は <unistd.h> に含まれる; glibc2 では Single Unix Specification に従って <stdlib.h> に含まれている。