仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 796|回复: 7
打印 上一主题 下一主题

[CentOS(社区)] 给大家带来CentOS下对一时文件的操纵之mkstemp

[复制链接]
因胸联盟 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-14 20:43:04 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
欢迎大家来到仓酷云论坛!利用一时文件要思索几个成绩:
包管一时文件间的文件名不合作抵触。
包管一时文件中内容不被其他用户大概黑客偷看、删除和修正。
Linux中供应了mkstemp和tmpfile函数来处置一时文件。
mkstemp函数
intmkstemp(char*template);
mkstemp函数在体系中以独一的文件名创立一个文件并翻开,并且只要以后用户才干会见这个一时文件,并举行读、写操纵。mkstemp函数只要一个参数,这个参数是个以“XXXXXX”开头的非空字符串。mkstemp函数会用随机发生的字符串交换“XXXXXX”,包管了文件名的独一性。函数前往一个文件形貌符,假如实行失利前往-1。在glibc2.0.6和更早的glibc库中这个文件的会见权限是0666,glibc2.0.7今后的库这个文件的会见权限是0600。
一时文件利用完成后应实时删除,不然一时文件目次会塞满渣滓。因为mkstemp函数创立的一时文件不克不及主动删除,以是实行完mkstemp函数后要挪用unlink函数,unlink函数删除文件的目次出口,但一时文件还能够经由过程文件形貌符举行会见,直到最初一个翻开的历程封闭文件操纵符,大概步伐加入后一时文件被主动完全地删除。

[cpp]viewplaincopy





  • <spanstyle="font-size:18px;">#include<stdio.h>
  • #include<string.h>
  • #include<unistd.h>
  • #include<stdlib.h>

  • intwrite_temp_file(char*buffer,size_tlength){
  • intlen=length;
  • charfilename_template[]="/tmp/temp_file.XXXXXX";
  • intfd=mkstemp(filename_template);
  • unlink(filename_template);//Unlinkthefile,soitllberemovedwhenclose
  • printf("Templatefilename:%s
    "
    ,filename_template);

  • write(fd,&len,sizeof(len));
  • write(fd,buffer,len);
  • returnfd;
  • }

  • char*read_temp_file(intfd,size_t*length){
  • char*buffer;
  • lseek(fd,0,SEEK_SET);
  • read(fd,length,sizeof(size_t));
  • buffer=(char*)malloc(*length);
  • read(fd,buffer,*length);
  • close(fd);//Tempfilewillbedeleted
  • returnbuffer;
  • }

  • intmain(intargc,char**argv){
  • charbuffer[]="Testtemplatefiles";
  • intfd=write_temp_file(buffer,strlen(buffer));
  • intlen=0;
  • char*result=read_temp_file(fd,&len);
  • printf("Len:%d
    Content:%s
    "
    ,len,result);

  • free(result);
  • return0;
  • }</span>




tmpfile函数
假如您利用ClibraryI/O函数,而且并没有另外一个步伐利用这个一时文件,有个更简便的函数——tmpfile。tmpfile函数创立并翻开一个一时文件,而且主动实行了unlink。tmpfile函数前往一个文件形貌符,假如实行失利前往NULL。当步伐实行了fclose大概加入时,资本被开释。
别的,linux体系中还供应mktemp、tmpnam、和tempnam等函数,可是因为强健性和宁静性的成绩,不倡议利用。

欢迎大家来到仓酷云论坛!
小妖女 该用户已被删除
7#
发表于 2015-3-18 13:29:19 | 只看该作者
和私有操作系统不同,各个Linux的发行版本的技术支持时间都较短,这对于Linux初学者是往往不够的。
飘飘悠悠 该用户已被删除
6#
发表于 2015-3-11 10:50:39 | 只看该作者
这也正是有别的OS得以存在的原因,每个系统都有其自身的优点。?
透明 该用户已被删除
5#
发表于 2015-3-3 10:52:51 | 只看该作者
首先Linux是开源的,这也是最主要的原因,想学windows,Unix,对不起我们没源代码。也正是因为这样,Linux才能够像滚雪球一样越滚越大,发展到现在这种规模。
若天明 该用户已被删除
地板
发表于 2015-2-5 15:35:23 | 只看该作者
以前觉得Linux就跟dos一样,全是用命令窗口,相对于窗口界面来说多麻烦呀。
第二个灵魂 该用户已被删除
板凳
发表于 2015-1-27 21:19:23 | 只看该作者
随着Linux应用的扩展,出现了不少Linux社区。有一些非常优秀的社区往往是Linux高手的舞台,如果在探讨高级技巧的论坛张贴非常初级的问题经常会没有结果。
金色的骷髅 该用户已被删除
沙发
发表于 2015-1-18 21:12:15 | 只看该作者
Linux简单,占内存少,特别是对于程序开发人员来说很方便,如果说windows的成功在于其方便用户的窗口管理界面。
admin 该用户已被删除
楼主
发表于 2015-1-16 17:54:16 | 只看该作者

给大家带来CentOS下对一时文件的操纵之mkstemp

对于英语不是很好的读者红旗Linux、中标Linux这些中文版本比较适合。现在一些Linux网站有一些Linux版本的免费下载,这里要说的是并不适合Linux初学者。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-26 10:16

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表