|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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等函数,可是因为强健性和宁静性的成绩,不倡议利用。
欢迎大家来到仓酷云论坛! |
|