#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():
mkostemp(): _GNU_SOURCE
mkstemps():
/* Glibc since 2.19: */ _DEFAULT_SOURCE
|| /* Glibc versions <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
mkostemps(): _GNU_SOURCE
引数 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() の関係と同じである。
これらの関数は open(2) に書かれているエラーのいずれかで失敗することもある。
インターフェース | 属性 | 値 |
mkstemp(),
mkostemp(),
mkstemps(), mkostemps() | Thread safety | MT-Safe |
mkstemps(): 標準化されていないが、他のいくつかのシステムにも存在する。
mkostemp() と mkostemps(): glibc による拡張。
より一般的には、 mkstemp() の POSIX 規定ではファイルモードについて何も述べていない。 従って、アプリケーションは mkstemp() (や mkostemp()) を呼び出す前にファイルモード生成マスク (umask(2) 参照) が適切に設定されているか確認するべきである。