linux下临时文件使用总结
临时文件的创建建议使用推荐函数tmpfile()
和mkstemp()
。临时文件的读写操作和普通文件的操作一样,都是调用write()
、read()
、fwrite()
等系统接口。下面是相关的函数接口说明。
临时文件相关的系统宏(在stdio.h
,stdlib.h
中):
P_tmpdir
系统宏:指定临时文件存放的目录位置,默认为/temp
。TMP_MAX
系统宏,系统最少可以创建的临时文件名的数量。L_tmpnam
系统宏:使用tmpnam()
等函数时会涉及。表示存放字符串buff的最小大小。
临时文件推荐使用的系统函数接口:
FILE *tmpfile(void)
- 需要包含
stdio.h
- 描述:以
wb+
模式创建临时文件。被创建的临时文件会在流关闭时或程序终止时自动删除。它是多线程安全的。 - return: 成功返回文件指针,失败返回NULL.
- 其他:glibc库中,使用
P_tmpdir
宏来指定临时文件的目录位置,默认为/temp
。
- 需要包含
int mkstemp(char *template)
- 需要包含
stdlib.h
- 描述:生成一个临时的、独一无二的文件名。并使用
open()
打开(打开时的权限为0600),然后返回其文件描述符。 - template:用来保存要生成的文件名字符串的数组指针。其中数组格式必须为:
anycharXXXXXX
.最后6位必须为XXXXXX
, 前缀随意. - 成功返回文件描述符,失败返回-1.
- 需要包含
一些不建议使用的系统函数接口:
char *tmpnam(char *s)
- 描述:生成一个临时的、独一无二的文件名。
- s:要保存文件名的数组指针。数组长度至少为
L_tmpnam
.也可以使s为NULL,这是tmpnam()会返回一个内部的数组指针。不过此函数现在不建议使用。因为它在多线程下不安全。建议使用mkstemp()
代替。 - 返回指向文件名的字符串指针。也就是当s!=NULL时,为s指针,当s=NULL时,为函数内部的静态数组指针。
char *tmpnam_r(char *s)
- 描述:类似tmpnam(),只不过不允许s=NULL.
char *mktemp(char *template)
- 描述:功能类似
mkstemp
.有bug,不建议使用。
- 描述:功能类似
例程如下:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
FILE *fp;
char buff[64] = "guoweilkd";
char readbuff[64];
/* 1. tmpfile()使用 */
fp = tmpfile();
fwrite(buff,sizeof(buff),1,fp);
fseek(fp,0,0);
fread(readbuff,sizeof(buff),1,fp);
printf("tmpfile read:%s\n",readbuff);
fclose(fp);
/* 1. mkstemp()使用 */
char filename[64] = "guoweilkdXXXXXX";
int fd = mkstemp(filename);
printf("fd=%d,file name is:%s\n",fd,filename);
write(fd,buff,sizeof(buff));
read(fd,readbuff,sizeof(readbuff));
printf("mkstemp read:%s\n",readbuff);
close(fd);
}