一時ファイル(標準関数編)

一時ファイル用の標準関数として、tmpnam()とtmpfile()があります。
tmpnam()は一時ファイルの名前を生成する関数で、tmpfile()は一時ファイルを作成してFILE構造体のポインタを返します。

なぜtmpfile()という関数があるかというと、

#include <cstdio>
using namespace std;
char filename[L_tmpnam];
char* ptr = tmpnam(filename);
FILE* fp = fopen(ptr, "w+b");

のような処理では、tmpnam()とfopen()の呼び出しの間に、他のプロセス/スレッドが同じファイル名を使用してしまう可能性があるからです。

ISO CでもPOSIXでもtmpnam()/tmpfile()で作成されるファイル名のディレクトリについては規定がありません。
できればこのディレクトリをコントロールしたいところです。

つづく。