.\" Copyright (c) 1988, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" the American National Standards Committee X3, on Information .\" Processing Systems. .\" .\" 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. .\" .\" @(#)tmpnam.3 8.2 (Berkeley) 11/17/93 .\" .\" $FreeBSD$ .Dd November 17, 1993 .Dt TMPFILE 3 .Os .Sh 名称 .Nm tempnam , .Nm tmpfile , .Nm tmpnam .Nd 一時ファイルルーチン .Sh 書式 .Fd #include .Ft FILE * .Fn tmpfile void .Ft char * .Fn tmpnam "char *str" .Ft char * .Fn tempnam "const char *tmpdir" "const char *prefix" .Sh 解説 .Fn tmpfile 関数は、 .Xr mkstemp 3 ルーチンによって返されたファイル記述子に 結合されたストリームへのポインタを返します。作成されたファイルは .Fn tmpfile 関数が値を返す前にリンク解除され、そのファイルはファイルへの最後の参照が 閉じられた時に自動的に削除されます。そのファイルは、アクセス値 .Ql w+ によって開かれます。 .Pp .Fn tmpnam 関数は、 .Dv P_tmpdir ディレクトリの中で、過去のある特定されない 時点で既存のファイルを参照しなかったファイル名へのポインタを返します。 .Dv P_tmpdir は、インクルードファイル .Aq Pa stdio.h の中で定義されます。引数 .Fa s が .Dv NULL でない場合は、ファイル名はそれが参照するバッファにコピーされます。 それ以外の場合は、ファイル名は静的バッファにコピーされます。どちらの 場合でも、 .Fn tmpnam 関数はそのファイル名へのポインタを返します。 .Pp .Fa s により参照されるバッファの長さは、少なくとも .Dv L_tmpnam バイトなければなりません。 .Dv L_tmpnam は、インクルードファイル .Aq Pa stdio.h の中で定義されます。 .Pp .Fn tempnam 関数は、 .Fn tmpnam 関数と同じようなものですが、一時ファイルと ファイル名プレフィックスを収容しているディレクトリを指定する機能を 持っています。 .Pp 一時ファイルを保存するディレクトリとしては、環境変数 .Ev TMPDIR ( これが設定されている場合 )、引数 .Fa tmpdir ( これが .Dv NULL でない場合 )、ディレクトリ .Dv P_tmpdir , ディレクトリ .Pa /tmp が、この順番で試されます。 .Pp ファイル名プレフィックスを指定するためには、値が .Dv NULL でない場合は引数 .Fa prefix が使われ、これが作成されるファイル名の最初の部分になります。 .Fn Tempnam 関数は、ファイル名を保存するメモリを割り当てます。返された ポインタは、 .Xr free 3 への次に続く引数として使うことができます。 .Sh 戻り値 .Fn tmpfile 関数は、成功した場合には開いたファイルストリームへのポインタ を、エラーの場合には .Dv NULL ポインタを返します。 .Pp .Fn tmpnam および .Fn tempfile 関数は、成功した場合にはファイル名を、 エラーの場合には .Dv NULL ポインタを返します。 .Sh エラー .Fn tmpfile 関数が失敗して、ライブラリ関数 .Xr fdopen 3 または .Xr mkstemp 3 について指定されたエラーのいずれかに対するグローバル変数 .Va errno が設定される場合があります。 .Pp .Fn tmpnam 関数が失敗して、ライブラリ関数 .Xr mktemp 3 について指定された エラーのいずれかに対する .Va errno が設定される場合があります。 .Pp .Fn tempnam 関数が失敗して、ライブラリ関数 .Xr malloc 3 または .Xr mktemp 3 について指定されたエラーのいずれかに対する .Va errno が設定される場合があります。 .Sh 参照 .Xr mkstemp 3 , .Xr mktemp 3 .Sh 規格 .Fn tmpfile および .Fn tmpnam 関数は、 .St -ansiC に準拠しています。 .Sh バグ これらのインタフェースは、System V および .Tn ANSI との互換性のみのために提供されています。 .Xr mkstemp 3 インタフェースの使用を強く推奨します。 .Pp これらのインタフェースには ( 古い .Xr mktemp 3 インタフェースと同様に ) 、 4 つの重大な問題があります。まず第一に、ファイル名選択とファイル作成および 削除の間には明らかな競合があります。第二に、ほとんどの古いシステムでは、 ファイル名がリサイクルされるまでには、限られた数 ( 通常は 26 ) の一時 ファイル名しか使えないことです。第三に、これらの関数 ( および .Xr mktemp 3 ) の System V インプリメンテーションは、一時ファイル作成の可否を決めるために .Xr access 2 関数を用いていることです。これは、setuid および setgid プログラムに対して 明らかな問題を派生させ、このようなプログラムにこれらの インタフェースを移植して使うことを複雑にします。最後に、一時ファイルを 作成する許可に関する指定がありません。 .Pp 本インプリメンテーションにはこれらの欠陥はありませんが、ポータブルな ソフトウェアはそれを頼りにすることはできません。特に、 .Fn tmpfile インタフェースは、ユーザが一時ファイルを公開して読み書き可能にすることを 望まない可能性がある場合は、他のシステム上で使用されることが予想される ソフトウェアの中では使うべきではありません。