mmap记住

1、映射区大小设置为0是不被允许的。换言之,用以映射的文件必须是有实际大小的/

2、MAP_SHARED时,一般创建映射区的权限应小于等于打开文件的权限,映射区创建的过程隐含着对文件的一次读操作。MAP_PRIVATE则无所谓。

3、mmap最后一个参数必须是4K的整数倍。因为是mmu帮助映射的

4、映射区一旦创立成功,那么文件描述符就没有用了

5、gdb追踪段错误步骤很简单:

gdb XXX.o

直接run。

哪句报错就是那句。

mmap出错率非常高,一定要检查返回值,确保映射成功。

 6.ftruncate/truncate

truncate相关命令

用法:truncate 选项... 文件...

将文件缩减或扩展至指定大小。

如果指定文件不存在则创建。

如果指定文件超出指定大小则超出的数据将丢失。

如果指定文件小于指定大小则用0 补足。

7.unlink函数:删除临时文件目录项,是指具有被释放条件,那么在所有占用此文件的进程结束之后才会被释放。

父子进程共享:打开的文件   mmap建立的映射区(但必须要使用MAP_SHARED)

匿名映射:通过使用我们发现,使用映射区来完成文件读写操作非常方便,父子进程间通信也比较容易。但缺陷是,每次创建映射区一定要依赖一个文件才能实现,通常为了建立映射区要open一个temp文件,创建好了再unlink、close,比较麻烦。可以直接使用匿名映射来代替。其实linux系统给我们提供了创建匿名映射的方法,无需依赖一个文件即可。同样需要借助标志位flags来指定。

MAP_ANONYMOUS(MAP_ANON)

int *p=mmap(NULL,4,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0);

4随意举例,该位置带下,可随意设置。 

但是这种是Linux独有的,所以如果在求他系统使用/dev/zero伪文件来操作

int fd=open("/dev/zero",O_RDWR);
P=mmap(NULL,size,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值