您的位置:首页 > 其它

创建临时文件——tmpnam,tmpfile,mktemp,mkstemp

2015-02-07 15:16 591 查看
创建名字唯一的临时文件:推荐使用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: