创建名字唯一的临时文件:推荐使用tmpfile和mkstemp,因为这两个函数创建文件的同时并打开文件,总的来说安全又可靠。tmpfile返回的是文件流指针FILE*,mkstemp返回的是文件描述符。
tmpnam,tmpfile
表头文件 #include <stdio.h>
函数定义 FILE *tmpfile(void);
函数描述 创建唯一的临时文件,并打开文件
返回值 成功返回文件流,失败返回NULL
表头文件 #include <stdio.h>
函数定义 char *tmpnam(char *s);
函数描述 创建唯一的临时文件
返回值 成功返回文件名字指针,失败返回NULL
#include <stdio.h>
#include <stdlib.h>
int main()
{
char tmpname[L_tmpnam];
char *filename;
FILE *tmpfp;
if((filename = tmpnam(tmpname)) != NULL) //方式一:不推荐使用
{
printf("Temporary file name is: %s\n", filename);
printf("Temporary tmpnam is: %s\n", tmpname);//在一次打开中filename 与 tmpnam相同
open(tmpname);
perror("open");
open(filename);
perror("open");
}
tmpfp = tmpfile(); //方式二:推荐使用
if(tmpfp)
printf("Opened a temporary file OK\n");
else
perror("tmpfile");
exit(0);
}
mktemp
用法与tmpnam差不多,只是名字部分可以由template确定,template后面六个字符必须为X,例如tmpXXXXXX
示例:
#include <stdlib.h>
#include <stdio.h>
//char *mktemp(char *template);
int main(int argc,char *argv[])
{
char filename[] = "temp-XXXXXX";
char *name;
if((name = mktemp(filename)) == NULL)
{
perror("mktemp");
exit(1);
}
printf("name:%s,filename:%s\n",name,filename);
exit(0);
}
mkstemp(建立唯一的临时文件)
相关函数 mktemp
表头文件 #include<stdlib.h>
定义函数 int mkstemp(char * template);
函数说明 mkstemp()用来建立唯一的临时文件。参数template 所指的文件名
称字符串中最后六个字符必须是XXXXXX。Mkstemp()会以可读写模式
和0600 权限来打开该文件,如果该文件不存在则会建立该文件。打
开该文件后其文件描述词会返回。文件顺利打开后返回可读写的文件描述词。
若果文件打开失败则返回NULL,并把错误代码存在errno中。
错误代码 EINVAL 参数template 字符串最后六个字符非XXXXXX。EEXIST 无法
建立临时文件。
附加说明 参数template所指的文件名称字符串必须声明为数组,如:
char template[ ] =”template-XXXXXX”;
千万不可以使用下列的表达方式
char *template = “template-XXXXXX”;
与mktemp函数区别:mkstemp返回值为文件描述符,mktemp返回值为文件名指针。
示例:
#include <stdlib.h>
int main(int argc,char *argv[])
{
int fd;
char tmpfile[] = "temp-XXXXXX";
if((fd = mkstemp(tmpfile))< 0)
{
perror("mkstemp");
exit(1);
}
close(fd);
exit(0);
}
http://blog.sina.com.cn/s/blog_63009a040100snyv.html