MKSTEMP(3) | Linux Programmer's Manual | MKSTEMP(3) |
名前¶
mkstemp, mkostemp - 他と重ならない名前を持つ一時ファイルを作成する
書式¶
#include <stdlib.h> int mkstemp(char *template); int mkostemp (char *template, int flags);
glibc
向けの機能検査マクロの要件
(feature_test_macros(7) 参照):
mkstemp(): _BSD_SOURCE || _SVID_SOURCE ||
_XOPEN_SOURCE >= 500
mkostemp(): _GNU_SOURCE
説明¶
関数 mkstemp() は引数 template から他と重ならない一時ファイル名を生成し、 そのファイルの作成とオープンを行い、 そのファイルに対するオープン済みのファイルディスクリプタを返す。
引数 template で指示する文字列の後ろの 6 文字は XXXXXX である必要がある。 この部分がファイル名を他と重ならないようにする文字で置き換えられる。 template は書き換えられるため、文字列定数ではなく文字配列として 宣言するようにしなければならない。
ファイルは許可モード 0600 で作成され、所有者のみが読み書き可能である (glibc バージョン 2.06 以前では、ファイルは許可モード 0666 で作成され、 全てのユーザが読み書き可能であった)。 返されるファイルディスクリプタで、このファイルへの読み書き両方のアクセスが 可能である。 呼び出し者がそのファイルを作成するプロセスであることを保証するために、 ファイルは open(2) の O_EXCL フラグ付きでオープンされる。
mkostemp() は mkstemp() と同様だが、 open(2) に渡されるフラグ O_APPEND, O_SYNC など) を flags で指定できる点が異なる
返り値¶
成功すると、これらの関数は一時ファイルのファイルディスクリプタを返す。 エラーの場合は、-1 を返し、 errno を適切に設定する。
エラー¶
- EEXIST
- すでに同じ名前を持つファイルが存在した。 template の内容は不定である。
- EINVAL
- 引数 template で指示された文字配列の後ろの 6 文字が XXXXXX でない。 template の内容は変化しない。
これらの関数は open(2) に書かわれているエラーのいずれかで失敗することもある。
バージョン¶
mkostemp() は glibc 2.7 以降で利用可能である。
準拠¶
mkstemp(): 4.3BSD, POSIX.1-2001. mkostemp(): glibc による拡張。
注意¶
許可モード 0666 でファイルを作成するという古い動作は、 セキュリティ上のリスクになる場合がある。 特に他の Unix では許可モードとして 0600 を使うため、 プログラムを移植する際、この細かな違いを見落とす可能性が あるからだ。
より一般的には、 mkstemp() の POSIX 規定ではファイルモードについて何も述べていない。 従って、アプリケーションは mkstemp() (や mkostemp()) を呼び出す前にファイルモード生成マスク (umask(2) 参照) が適切に設定されているか確認するべきである。
mktemp() のプロトタイプ宣言は、libc4, libc5, glibc1 では <unistd.h> に含まれる; glibc2 では POSIX.1 に準拠し <stdlib.h> に含まれている。
関連項目¶
2008-06-19 | GNU |