名称
mktemp(), mkstemp() ― 一意なファイル名の生成
構文
#include <stdlib.h>
char *mktemp(char *template);
int mkstemp(char *template);
注
この関数は、旧製品との互換性およびアプリケーションの移植性を保つためのみに提供されています。移植性が重要な新しいアプリケーションの開発には、このコマンドの使用は推奨できません。
移植可能なアプリケーションには、代替として tmpfile() tmpfile(3S) を参照) を使用してください。
説明
mktemp() は、 template に示される文字列を一意のファイル名と置き換え、 template のアドレスを返します。 template の示す文字列は、 6 つの X が連続するファイル名です。 mktemp() は、連続する X を、1 つの文字と現在のプロセス
ID で置換えます。 文字は、すでに存在するファイル名と重複しないように選択されます。 X が 6 個以下の場合は、文字部分がまず削られ、ついでプロセス
ID の高位の桁が続けて削られます。
mkstemp() は、同様なテンプレートの置換えを行いますが、同時に一時ファイルを読み込みと書き込み用にオープンし、そのファイル記述子を返します。
そのため mkstemp() は、ファイルの存在のチェックおよびファイル使用のためのオープンが競合するのを防ぎます。
戻り値
mktemp() は文字を使いきった場合、空の文字列へのポインターを返し、それ以外の場合は、その引き数を返します。
mkstemp() は正常終了すると、開いているファイルの記述子を返します。
適当なファイルを作成できなかった場合は、-1 を返します。
警告
文字を使いきる可能性があります。
mktemp() および mkstemp() は、 template のファイル名の部分が、ファイル名の最大長を超えていないかどうかはチェックしません。
参照
getpid(2), open(2), tmpfile(3S), tmpnam(3S), thread_safety(5)
標準準拠
mktemp(): SVID2, SVID3, XPG2