创建临时文件 tmpnam tmpfile tempnam mkstemp unlink
2012-07-03 15:51
246 查看
推荐使用 tmpfile mkstemp
int mkstemp(char *template);
mkstemp函数在系统中以唯一的文件名创建一个文件并打开,而且只有当前用户才能访问这个临时文件,并进行读、写操作。
建立唯一临时文件名, template须以数组形式声明而非指针形式.
template格式为: template.XXXXXX. 最后6位必须为XXXXXX, 前缀随意
函数返回一个文件描述符,如果执行失败返回-1。
在glibc 2.0.6 以及更早的glibc库中这个文件的访问权限是0666,glibc 2.0.7以后的库这个文件的访问权限是0600。
由于mkstemp函数创建的临时文件不能自动删除,所以执行完mkstemp函数后要调用unlink函数,unlink函数删除文件的目录入口,但临时文件还可以通过文件描述符进行访问,直到最后一个打开的进程关闭文件操作符,或者程序退出后临时文件被自动彻底地删除。
下面是一个使用mkstemp的例子:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int main(void) { FILE *pfile,*pfile2; int fileSize, readSize; char * fileBuff = NULL; char buff[128] = { 0 }; <strong>/****************(1) tmpfile() *****************/</strong> pfile2= tmpfile(); if(pfile2 == NULL) { fputs("creat temp file error",stderr); exit(1); } if( EOF == fputs("tmpfile function create me !",pfile2)) { fputs("write err.\n",stderr); exit(1); } rewind(pfile2); // positions the stream stream at the beginning of the file fgets(buff,sizeof(buff),pfile2); puts(buff); <strong>/********************(2) tmpnam() + unlink() *****************/</strong> memset(buff,0,sizeof(buff)); puts(tmpnam(buff)); /*************read or write file***************/ pfile = fopen(buff, "a+"); unlink(buff); if(pfile == NULL ) { fputs("open error", stderr); exit(1); } if (sizeof("11111111") != fwrite("11111111", sizeof(char), sizeof("11111111") / sizeof(char), pfile)) { fputs("write error", stderr); exit(1); } //get the file size fseek(pfile, 0, SEEK_END); fileSize = ftell(pfile); rewind(pfile); printf("filesize:%d\n", fileSize); fileBuff = (char *) malloc(sizeof(char) * fileSize); if (fileSize != (readSize = fread(fileBuff, sizeof(char), fileSize, pfile))) { fputs("Read error", stderr); exit(3); } else { printf("readContent: %s \nreadsize:%d\n",fileBuff,readSize); } fclose(pfile); free(fileBuff); <strong>/********************(3) fopen() and unlink() **************/</strong> pfile=NULL; pfile=fopen("/tmp/tempA.txt","w+"); if(pfile == NULL ) { fputs("create file failed.",stderr); exit(1); } fputs("fopen create me",pfile); rewind(pfile); if( fgets(buff,sizeof(buff),pfile) == NULL ) { fputs("read file error.\n",stderr); exit(1); } fputs(buff,stdout); fclose(pfile); unlink("/tmp/tempA.txt"); puts("\nDONE.......\n"); return EXIT_SUCCESS; }
int mkstemp(char *template);
mkstemp函数在系统中以唯一的文件名创建一个文件并打开,而且只有当前用户才能访问这个临时文件,并进行读、写操作。
建立唯一临时文件名, template须以数组形式声明而非指针形式.
template格式为: template.XXXXXX. 最后6位必须为XXXXXX, 前缀随意
函数返回一个文件描述符,如果执行失败返回-1。
在glibc 2.0.6 以及更早的glibc库中这个文件的访问权限是0666,glibc 2.0.7以后的库这个文件的访问权限是0600。
由于mkstemp函数创建的临时文件不能自动删除,所以执行完mkstemp函数后要调用unlink函数,unlink函数删除文件的目录入口,但临时文件还可以通过文件描述符进行访问,直到最后一个打开的进程关闭文件操作符,或者程序退出后临时文件被自动彻底地删除。
下面是一个使用mkstemp的例子:
int main(void) { int fd; char temp_file[]="tmp_XXXXXX"; /*Creat a temp file.*/ if((fd=mkstemp(temp_file))==-1) { printf("Creat temp file faile./n"); exit(1); } /*Unlink the temp file.*/ unlink(temp_file); close(fd); }
相关文章推荐
- 创建临时文件 tmpnam tmpfile tempnam mkstemp unlink
- 创建临时文件 tmpnam tmpfile tempnam mkstemp unlink
- 创建临时文件——tmpnam,tmpfile,mktemp,mkstemp
- "ORA-20100: 为 FND_FILE 创建文件 o0003167.tmp 失败"
- 【Java】File.createTempFile创建临时文件
- C# 通过用application.startuppath+tmp创建图片存储临时虚拟文件
- thinkphp Upload上传文件在客户端生成的临时文件$_FILES['file']['tmp_name']
- Linux中临时文件创建函数mkstemp的用法
- confluence创建文件报错 can not create to file /tmp/xxx Errcode:28,引出的 df命令高级用法
- 利用mkstemp创建程序退出后不会被删除的临时文件
- Apache Commons FileUpload不安全临时文件创建漏洞(CVE-2013-0248)
- Linux中临时文件创建函数mkstemp的用法
- 通过unlink创建安全的临时文件
- 通过先unlink()后close()创建安全的临时文件
- PHP 使用tempnam保存临时文件,而不是自己维护临时文件的创建和删除
- tempfile.mkstemp 创建的文件的删除问题
- "ORA-20100: 为 FND_FILE 创建文件 o0003167.tmp 失败"
- "ORA-20100: 为 FND_FILE 创建文件 o0003167.tmp 失败"
- VS2012与VS2015同时安装用VS2012创建MFC程序时弹出编译错误”fatal error C1083: 无法打开包括文件:“mprapidef.h”: No such file or directory”的解决办法
- 在TFileListBox的子类里重写ReadFileNames那个虚方法(见filectrl.pas),根据文件创建时间进行排序。