因胸联盟 发表于 2015-1-14 20:43:04

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

欢迎大家来到仓酷云论坛!利用一时文件要思索几个成绩:
包管一时文件间的文件名不合作抵触。
包管一时文件中内容不被其他用户大概黑客偷看、删除和修正。
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函数删除文件的目次出口,但一时文件还能够经由过程文件形貌符举行会见,直到最初一个翻开的历程封闭文件操纵符,大概步伐加入后一时文件被主动完全地删除。
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等函数,可是因为强健性和宁静性的成绩,不倡议利用。
欢迎大家来到仓酷云论坛!

admin 发表于 2015-1-16 17:54:16

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

对于英语不是很好的读者红旗Linux、中标Linux这些中文版本比较适合。现在一些Linux网站有一些Linux版本的免费下载,这里要说的是并不适合Linux初学者。

金色的骷髅 发表于 2015-1-18 21:12:15

Linux简单,占内存少,特别是对于程序开发人员来说很方便,如果说windows的成功在于其方便用户的窗口管理界面。

第二个灵魂 发表于 2015-1-27 21:19:23

随着Linux应用的扩展,出现了不少Linux社区。有一些非常优秀的社区往往是Linux高手的舞台,如果在探讨高级技巧的论坛张贴非常初级的问题经常会没有结果。

若天明 发表于 2015-2-5 15:35:23

以前觉得Linux就跟dos一样,全是用命令窗口,相对于窗口界面来说多麻烦呀。

透明 发表于 2015-3-3 10:52:51

首先Linux是开源的,这也是最主要的原因,想学windows,Unix,对不起我们没源代码。也正是因为这样,Linux才能够像滚雪球一样越滚越大,发展到现在这种规模。

飘飘悠悠 发表于 2015-3-11 10:50:39

这也正是有别的OS得以存在的原因,每个系统都有其自身的优点。?

小妖女 发表于 2015-3-18 13:29:19

和私有操作系统不同,各个Linux的发行版本的技术支持时间都较短,这对于Linux初学者是往往不够的。
页: [1]
查看完整版本: 给大家带来CentOS下对一时文件的操纵之mkstemp