関数mytmpnam マニュアル
(The documentation of function mytmpnam)
Last Update: 2021/12/1
◆機能・用途(Purpose)
既存ファイルと重複しない一時ファイルを作成し、その名前を取得する。
Create a temporary file whose name is different from
all the existing files, and get the newly created file name.
◆形式(Format)
#include <file.h>
inline char ∗mytmpnam(void)
◆戻り値(Return value)
作成したファイル名を表す文字列の先頭アドレス。
The head address of a string that represents the newly created file name.
◆使用例(Example)
char ∗tmpfile=mytmpnam();
◆補足(Additional remarks)
作成されるファイル名は/tmp/file??????であり、
各?には0-9, a-z, A-Zのいずれかが入る。
最初に/tmp/file000000が存在するかをチェックし、
存在しない場合は/tmp/file000000を作成して返す。
/tmp/file000000が既に存在した場合は/tmp/file000001を試し、
それも存在した場合は/tmp/file000002を試す。
以下同様にして、??????を0-9, a-z, A-Zによる6桁の62進数として
1ずつ大きくしながら存在しないファイル名を探す流れになる。
すなわち
/tmp/file000000→
/tmp/file000001→
…→
/tmp/file000009→
/tmp/file00000a→
/tmp/file00000b→
…→
/tmp/file00000z→
/tmp/file00000A→
/tmp/file00000B→
…→
/tmp/file00000Z→
/tmp/file000010→
/tmp/file000011→
…→
/tmp/file00001Z→
/tmp/file000020→
/tmp/file000021→
…→
/tmp/file00002Z→
…→
/tmp/file0000ZZ→
/tmp/file000100→
…
のように順にファイル名を変えながら存在しないファイル名を探す。
The file name to be created is /tmp/file??????,
where each ? is one of 0-9, a-z, or A-Z.
First, the function checks if a file /tmp/file000000 already exists.
If this file does not exist,
the function creates this file and returns this file name.
If this file already exists, the function next tries /tmp/file000001,
and if this file also exists, the function then tries /tmp/file000002.
In the same way, the ?????? part of the file name
is sequentially incremented
as a 6-digit 62-base number consisting of 0-9, a-z, and A-Z
to find a file name which does not duplicate existing files.
The order of candidate file names to be tried is thus as follows:
/tmp/file000000→
/tmp/file000001→
…→
/tmp/file000009→
/tmp/file00000a→
/tmp/file00000b→
…→
/tmp/file00000z→
/tmp/file00000A→
/tmp/file00000B→
…→
/tmp/file00000Z→
/tmp/file000010→
/tmp/file000011→
…→
/tmp/file00001Z→
/tmp/file000020→
/tmp/file000021→
…→
/tmp/file00002Z→
…→
/tmp/file0000ZZ→
/tmp/file000100→
….
この関数は組み込み関数のtmpnam, mkstempの改良版である。
tmpnamはセキュリティ上使用を避けた方が良いとのことである。
mkstempではセキュリティの問題は解消されているが、
関数の外で一部の変数の値を手動で設定しなければならないなど
使い勝手があまり良くないことに加え、
1つのプログラムから1024個弱の一時ファイルを作成すると
エラーが起きてしまうようである。
これらの問題を回避するために自作したのがこの関数である。
This function is an improved version of built-in functions
tmpnam and mkstemp.
The function tmpnam is not recommended for security reasons.
In the function mkstemp,
the security problem is said to be fixed;
however, the function is inconvenient in that
some variables must be manually set outside of the function,
and an error occurs when slightly less than 1024 temporary files
are created by a single program.
To avoid these problems, this function was created.