Next: File Name Completion, Previous: File Name Expansion, Up: File Names [Contents][Index]
一時ファイルに書き込む必要があるプログラムが、いくつかあります。以下は、そのようなファイルを構築する、便利な方法です:
(make-temp-file name-of-application)
make-temp-file
の役目は、2人の異なるユーザー、またはジョブが、完全に一致する名前のファイルの使用を防ぐことです。
この関数は、一時ファイルを作成して、その名前をリターンする。Emacsは、Emacsの各ジョブごとに異なるランダムないくつかの文字をprefixに追加することにより、一時ファイルの名前を作成する。結果として新たに空のファイルが作成されることが保障される。MS-DOSでは、8+3のファイル名制限に適合するよう、文字列stringは切り詰められる可能性がある。prefixが相対ファイル名の場合、それはtemporary-file-directory
にたいして展開される。
(make-temp-file "foo") ⇒ "/tmp/foo232J6v"
make-temp-file
がリターンした際、一時ファイルは空で作成される。この時点で、そのファイルに意図するコンテンツを書き込むべきである。
dir-flagがnil
の場合、make-temp-file
は空のファイルのかわりに、空のディレクトリーを作成する。これはディレクトリー名ではなく、ディレクトリーのファイル名をリターンする。Directory Namesを参照のこと。
suffixが非nil
の場合、make-temp-file
はそれをファイル名の最後に追加する。
同じEmacs内で実行される異なるライブラリー間での競合を防ぐために、make-temp-file
を使用する各Lispプログラムがプログラム自身のprefixを使用するべきである。prefixの最後に追加される数字は、異なるEmacsジョブ内で実行される、同じアプリケーションを区別する。追加される文字により、同一のEmacsジョブ内でも、多数の名前を区別することが可能になる。
一時ファイル用のデフォルトディレクトリーは、変数temporary-file-directory
により制御されます。この変数により、すべての一時ファイルにたいして、ユーザーがディレクトリーを指定する、一貫した方法が与えられます。small-temporary-file-directory
が非nil
の場合は、かわりにそれを使うプログラムもいくつかあります。これを使う場合は、make-temp-file
を呼び出す前に、正しいディレクトリーにたいしてプレフィックスを展開するべきです。
この変数は、一時ファイル作成用のディレクトリー名を指定する。値はディレクトリー名であるべきだが、もし値がディレクトリーのファイル名(Directory Namesを参照)ならば、Lispプログラムがかわりに対処すればよい。expand-file-name
の2つ目の引数としてその値を使用するのは、それを達成するよい方法である。
デフォルト値は、オペレーティングシステムにたいして適切な方法により決定される。これは環境変数TMPDIR
、TMP
、TEMP
にもとづき、これらの変数が定義されていなければ、システム依存の名前にフォールバックする。
一時ファイルの作成にmake-temp-file
を使用しない場合でも、一時ファイルを置くディレクトリーを判断するために、依然としてこの変数を使用するべきである。しかし、一時ファイルが小さくなることを求める場合は、small-temporary-file-directory
が非nil
ならば、それを使用するべきである。
この変数は、小さいかもしれない特定の一時ファイル作成用のディレクトリー名を指定する。
小さくなるかもしれない一時ファイルに書き込みたい場合は、以下のようにディレクトリーを計算するべきである:
(make-temp-file (expand-file-name prefix (or small-temporary-file-directory temporary-file-directory)))
この関数は、一意なファイル名として使用できる文字列を生成する。この名前はbase-nameで始まり、それに各Emacsジョブごとに異なる、複数のランダムな文字を追加したものである。これはmake-temp-file
と似ているが、(i)名前だけを作成し、ファイルは作成しない、(ii)base-nameは絶対ファイル名であること、という点が異なる(MS-DOSシステムでは、8+3ファイル名制限に適合するよう、base-nameが切り詰められる)。
警告: この関数を使用するべきではない。かわりにmake-temp-file
を使用すること!
この関数は、競合状態の影響を受けやすい。make-temp-name
呼び出しと一時ファイル作成のタイムラグは、セキュリティーホールとなる場合があるかもしれない。