1 临时文件
在一些情况下,程序会利用一些文件形式的临时存储手段,但我们必须保证应用程序为临时文件选取的文件名是唯一的。
#include <stdio.h>
char* tmpnam(char* s);
FILE* tmpfile();
tmpnam函数返回一个不与已存在的文件同名的有效文件名,若字符串s不为空,则文件名写入它,对tmp的后续调用会覆盖存放返回值的静态存储区。该字符串长度至少为L_tmpnam
个字符,且tmpnam函数可被一个程序最多调用TMP_MAX
次。注意它只是返回一个独一无二的文件名,文件并未创建。
tmpfile函数返回一个文件流指针,失败时返回NULL且设置errno的值。指向一个唯一的临时文件,以读写方式打开(w+b),该函数在创建文件的同时打开文件,当对该文件的所有引用关闭时,该文件会被自动删除。创建的临时文件都位于/tmp/目录下,且进程结束时会被自动删除。
#include <stdlib.h>
char* mktemp(char* template);
int mkstemp(char* template);
mktemp函数以指定的模板为基础创建一个唯一的文件名,模板要求template参数必须是一个以6个X字符结尾的字符串,返回一个指向生成的字符串的指针,失败时返回空指针,类似的将字符串写入template中。注意它只是返回一个独一无二的文件名,文件并未创建。
mkstemp同样创建唯一文件并打开,需要指定模板,返回值是一个已经打开的底层文件描述符,创建的文件是在当前程序所在目录下。
切记,我们要在程序中使用tmpfile和mkstemp创建并打开文件,不要使用tmpnam和mktemp。