.\" Copyright (c) 1989, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)mktemp.3 8.1 (Berkeley) 6/4/93 .\" .Dd February 11, 1998 .Dt MKTEMP 3 .Os .Sh 名称 .Nm mktemp .Nd 一意な一時ファイル名を作成 .Sh 書式 .Fd #include .Ft char * .Fn mktemp "char *template" .Ft int .Fn mkstemp "char *template" .Ft char * .Fn mkdtemp "char *template" .Sh 解説 .Fn mktemp 関数は、特定ファイル名テンプレートの一部を書き換えて ファイル名を作成します。このファイル名は一意的で、 アプリケーションでの使用に 適合しています。テンプレートとしては、 /tmp/temp.XXXX のように、任意の ファイル名に数桁の文字 .Ql X が付いているものが使用されます。最後の .Ql X は、 現在のプロセス番号か固有な文字、またはその両方の組み合わせで置き 換えられます。 .Fn mktemp が戻す一意的なファイル名の数は、 .Ql X の数によって決まります。 .Ql X が6 桁である場合、 .Fn mktemp は約 26 ** 6 とおりのファイル名を作成できます。 .Pp .Fn mkstemp 関数は、テンプレートを同じように置き換えて テンプレートファイル、モード 0600 を作成し、読み書き用としてオープンした ファイル記述子を返します。これにより、ファイルの存在を確認することと 使用するためにオープンすることとの間の競合状況を避けられます。 .Fn mkdtemp 関数は、テンプレートを .Xr mktemp 3 と同じように置き換え、 テンプレートディレクトリ、モード 0700 を作成します。 .Sh 戻り値 .Fn mktemp 関数と .Fn mkdtemp 関数は、問題がない場合はテンプレートのポインタを戻し、問題がある場合は .Dv NULL を戻します。 .Fn mkstemp 関数は、適切なファイルを作成できない場合に \-1 を戻します。 どの呼出しでもエラーが発生すると、エラーコードがグローバル変数 .Va errno に書き込まれます。 .Sh エラー .Fn mkstemp 関数と .Fn mkdtemp 関数は、以下の 1 つの値に .Va errno を設定します。 .Bl -tag -width [ENOTDIR] .It Bq Er ENOTDIR テンプレートのパス名部分が、存在するディレクトリではない。 .El .Pp .Fn mkstemp 関数と .Fn mkdtemp 関数は、 .Xr stat 2 関数で規定されるどの値も .Va errno に設定する可能性があります。 .Pp .Fn mkstemp 関数は、 .Xr open 2 関数で規定されるどの値も .Va errno に設定する可能性があります。 .Pp .Fn mkdtemp 関数は、 .Xr mkdir 2 関数で規定されるどの値も .Va errno に設定する可能性があります。 .Sh 注 コアダンプに終わる問題として普通なものは、プログラマが、 .Fn mktemp , .Fn mkstemp , .Fn mkdtemp に読込み専用ストリングを渡しているために発生します。 この問題は、 .St -ansiC コンパイラが普及する前に 開発されたプログラムで多く見られます。たとえば 引数 .Qq /tmp/tempfile.XXXXXX を指定して .Fn mkstemp を呼び出すと、 .Fn mkstemp が、指定されたストリング定数を修正しようとするので、コアダンプが 起こります。問題を起こすプログラムが、このような関数呼出しを頻繁に 行なっている場合は、メモリの書込み可能セグメントへストリング定数を 保存するようにプログラムをコンパイルすることもできます。詳細については、 .Xr gcc 1 を参照してください。 .Sh バグ システム攻撃者は、 .Fn mktemp が作成したファイル名を推測できます。できるかぎり .Fn mkstemp を使用してください。 .Pp .Sh 関連項目 .Xr chmod 2 , .Xr getpid 2 , .Xr mkdir 2 , .Xr open 2 , .Xr stat 2 .Sh 歴史 .Fn mktemp 関数は、 .At v7 に追加されました。 .Fn mkdtemp 関数は、 .Ox 2.2 に追加されました。 .\"kuma 1999-11-10