注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

多多的爹

 
 
 

日志

 
 

读程序,学习Linux编程(十五)  

2010-08-21 23:57:36|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

3.8. mkstemp

继续到270行:

270 init_stats();

ctrl+]进入到这个函数,跳转到文件stats.c。这个文件有三个函数,统计连接状态的次数,包括失败,打开,关闭,否认和拒绝这五种连接状态。

前面提到过,tinyproxy使用了进程池,每个进程管理一个连接。为了将所有子进程的连接数据统计在一块,这里用了共享内存文件中。

在stats.c的48,能看到创建共享内在文件函数:

48 malloc_shared_memory

ctrl+]进入这个函数,跳转到文件heap.c。这里有两个内容,需要说明一下,首先是mkstemp,后面再接着讲共享内存文件。我从网上找了一篇文章说明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函数删除文件的目录入口,但临时文件还可以通过文件描述符进行访问,直到最后一个打开的进程关闭文件操作符,或者程序退出后临时文件被自动彻底地删除。

下面是一个使用mkstemp的例子:

int main(void)

{

int fd;

char temp_file[]="tmp_XXXXXX";

/*Creat a temp file.*/

if((fd=mkstemp(temp_file))==-1)

{

printf("Creat temp file faile.\n");

exit(1);

}

/*Unlink the temp file.*/

unlink(temp_file);

/*Then you can read or write the temp file.*/

//ADD YOUR CODE;

/*Close temp file, when exit this program, the temp file will be removed.*/

close(fd);

}

转自http://blog.csdn.net/simon_dong618/archive/2007/05/11/1604739.aspx

  评论这张
 
阅读(188)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017