unix编程创建前缀固定的临时文件代码分享

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/

参数:

pathname,存储临时文件的路径文件名,需要手动free()掉。

dir,临时文件的路径,如果TMPDIR环境变量不为空,则此参数被忽略,转而使用环境变量。

pfx,临时文件名的前缀,只使用前5个字符。

注:

创建的临时文件需要手动unlink()掉。

创建临时文件的函数

复制代码

代码如下:

int  Make_temp_file(char **pathname,const char *dir,const char *pfx){

 char *ptr,*tmp;

 size_t len;

 int fd;

debug_assert(“Invalid pointer”,”Make_temp_file()”,pathname);

 /*前缀只能是多于5字符*/

 if(pfx && (len=strlen(pfx))>0){

tmp=(char*)Malloc((len>5?5:len)+1);

  strncpy(tmp,pfx,len>5?5:len);

 }

 else

  tmp=NULL;

 ptr=tempnam(dir,tmp);

 if(tmp)free(tmp);

len=strlen(ptr);

 tmp=(char*)Malloc(len+6+1);

 if(snprintf(tmp,len+6+1,”%sXXXXXX”,ptr)==-1)

err_sys(errno,”snprintf() error”);

 free(ptr);

 fd=Mkstemp(tmp);

 *pathname=tmp;

 return fd;

}

测试程序

复制代码

代码如下:

#include “wrap_ext.h”

int main(int argc,char **argv){

 int fd;

 char *path;

 if(argc!=3)

  err_quit(-1,”usage %s

“,argv[0]);

fd=Make_temp_file(&path,argv[1][0]== ?NULL:argv[1],argv[2][0]== ?NULL:argv[2]);

err_msg(“temporary file path:%s”,path);

 Close(fd);

 Unlink(path);

 free(path);

 return EXIT_SUCCESS;

}

测试结果

复制代码

代码如下:

root@U-SERVER:/home/apu/sysinfo# ./tmpfile ” ” ” “

temporary file path:/tmp/fileq55hoF8swFfa

root@U-SERVER:/home/apu/sysinfo# ll /tmp/fileq55hoF8swFfa

ls: cannot access /tmp/fileq55hoF8swFfa: No such file or directory

root@U-SERVER:/home/apu/sysinfo# ./tmpfile ” ” tmp_

temporary file path:/tmp/tmp_0rzhqozlthxW

root@U-SERVER:/home/apu/sysinfo# ./tmpfile /home tmp_

temporary file path:/home/tmp_phzxvRrp33OL

免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容