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

多多的爹

 
 
 

日志

 
 

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

2010-08-22 00:04:18|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

3.10. mmap

据说Linux有三种共享内存,一种是mmap,一种是系统V共享内存,另一种是传说中的,未实现的Posix的共享内存。系统V共享内存听说过没见过,我们只谈mmap。

mmap共享内存的名字应该叫共享内存文件才对,因为他必须使用一个打开的文件或者设备。如果不是临时文件,并且使用完后不删除这个文件,更像是Windows下的内存映射文件的操作方式。定义如下:

#include

void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);

参数具体的含义查看man。

共享内存用完后用munmap删掉。不过由于通常进程关闭后,共享内存会被自动关闭,所以调不调用无所谓,这里也就不介绍了。

tinyproxy的代码非常标准,如果要使用共享内存,可以直接拷过来用,我这里还是写一个模板:

void* malloc_shared_memory(size_t size)

{

int fd;

void* ptr;

char buffer[32];

static char* shared_file = "/tmp/yourappname.shared.XXXXXX";

assert(size > 0);

strlcpy(buffer, shared_file, sizeof(buffer));

if ((fd = mkstemp(buffer)) == MAP_FAILED)

return NULL;

unlink(buffer);

if (ftruncate(fd, size) == MAP_FAILED) // 这一句非常重要

return NULL;

ptr = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);

return ptr;

}

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

历史上的今天

评论

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

页脚

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