ºìÁªLinuxÃÅ»§
Linux°ïÖú

Linux϶ÔÁÙʱÎļþµÄ²Ù×÷Ö®mkstemp

·¢²¼Ê±¼ä:2014-06-06 15:40:43À´Ô´:ºìÁª×÷Õß:velcbo
ʹÓÃÁÙʱÎļþÒª¿¼ÂǼ¸¸öÎÊÌ⣺

±£Ö¤ÁÙʱÎļþ¼äµÄÎļþÃû²»»¥Öú³åÍ»¡£

±£Ö¤ÁÙʱÎļþÖÐÄÚÈݲ»±»ÆäËûÓû§»òÕߺڿÍ͵¿´¡¢É¾³ýºÍÐ޸ġ£

LinuxÖÐÌṩÁËmkstemp ºÍ tmpfile º¯ÊýÀ´´¦ÀíÁÙʱÎļþ¡£

mkstempº¯Êý

int mkstemp(char *template);

mkstempº¯ÊýÔÚϵͳÖÐÒÔΨһµÄÎļþÃû´´½¨Ò»¸öÎļþ²¢´ò¿ª£¬¶øÇÒÖ»Óе±Ç°Óû§²ÅÄÜ·ÃÎÊÕâ¸öÁÙʱÎļþ£¬²¢½øÐжÁ¡¢Ð´²Ù×÷¡£mkstempº¯ÊýÖ»ÓÐÒ»¸ö²ÎÊý£¬Õâ¸ö²ÎÊýÊǸöÒÔ¡°XXXXXX¡±½áβµÄ·Ç¿Õ×Ö·û´®¡£mkstempº¯Êý»áÓÃËæ»ú²úÉúµÄ×Ö·û´®Ìæ»»¡°XXXXXX¡±£¬±£Ö¤ÁËÎļþÃûµÄΨһÐÔ¡£ º¯Êý·µ»ØÒ»¸öÎļþÃèÊö·û£¬Èç¹ûÖ´ÐÐʧ°Ü·µ»Ø-1¡£ÔÚglibc 2.0.6 ÒÔ¼°¸üÔçµÄglibc¿âÖÐÕâ¸öÎļþµÄ·ÃÎÊȨÏÞÊÇ0666£¬glibc 2.0.7ÒÔºóµÄ¿âÕâ¸öÎļþµÄ·ÃÎÊȨÏÞÊÇ0600¡£

ÁÙʱÎļþʹÓÃÍê³ÉºóÓ¦¼°Ê±É¾³ý£¬·ñÔòÁÙʱÎļþĿ¼»áÈûÂúÀ¬»ø¡£ÓÉÓÚmkstempº¯Êý´´½¨µÄÁÙʱÎļþ²»ÄÜ×Ô¶¯É¾³ý£¬ËùÒÔÖ´ÐÐÍêmkstempº¯ÊýºóÒªµ÷ÓÃunlinkº¯Êý£¬unlinkº¯Êýɾ³ýÎļþµÄĿ¼Èë¿Ú£¬µ«ÁÙʱÎļþ»¹¿ÉÒÔͨ¹ýÎļþÃèÊö·û½øÐзÃÎÊ£¬Ö±µ½×îºóÒ»¸ö´ò¿ªµÄ½ø³Ì¹Ø±ÕÎļþ²Ù×÷·û£¬»òÕß³ÌÐòÍ˳öºóÁÙʱÎļþ±»×Ô¶¯³¹µ×µØÉ¾³ý¡£[code]#include
#include
#include
#include

int write_temp_file(char* buffer,size_t length) {
int len=length;
char filename_template[]="/tmp/temp_file.XXXXXX";
int fd=mkstemp(filename_template);
unlink(filename_template);//Unlink the file, so it'll be removed when close
printf("Template file name:%s\n",filename_template);
write(fd,&len,sizeof(len));
write(fd,buffer,len);
return fd;
}

char* read_temp_file(int fd, 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); // Temp file will be deleted
return buffer;
}

int main(int argc, char** argv) {
char buffer[]="Test template files";
int fd=write_temp_file(buffer,strlen(buffer));
int len=0;
char* result=read_temp_file(fd,&len);
printf("Len:%d\nContent:%s\n",len,result);
free(result);
return 0;
}[/code]tmpfileº¯Êý

Èç¹ûÄúʹÓÃC library I/Oº¯Êý£¬²¢ÇÒ²¢Ã»ÓÐÁíÒ»¸ö³ÌÐòʹÓÃÕâ¸öÁÙʱÎļþ£¬Óиö¸ü¼ò½àµÄº¯Êý----tmpfile¡£tmpfileº¯Êý´´½¨²¢´ò¿ªÒ»¸öÁÙʱÎļþ£¬²¢ÇÒ×Ô¶¯Ö´ÐÐÁËunlink¡£tmpfileº¯Êý·µ»ØÒ»¸öÎļþÃèÊö·û£¬Èç¹ûÖ´ÐÐʧ°Ü·µ»ØNULL¡£µ±³ÌÐòÖ´ÐÐÁËfclose»òÕßÍ˳öʱ£¬×ÊÔ´±»ÊÍ·Å¡£

ÁíÍ⣬linuxϵͳÖл¹Ìṩmktemp¡¢ tmpnam¡¢ ºÍtempnamµÈº¯Êý£¬µ«ÊÇÓÉÓÚ½¡×³ÐԺͰ²È«ÐÔµÄÎÊÌ⣬²»½¨ÒéʹÓá£

×÷Õߣºhongkangwl
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ