内存映射的注意事项
对mmap的返回值进行++操作 那么之后的munmap是否还会成功
可以进行++操作
但是munmap会出错(因为正常是从地址头部进行释放的,如果你保存了原始值
那么就没有问题了)
如果在open的时候只指定了读权限
但是mmap的时候prot 指定了读写权限
那么mmap调用会返回MAP_FAILED(映射失败)
就像我们前面说过的,PROT指定的权限要是OPEN的子集
如果文件偏移量为1000
偏移量决定了从文件的哪个位置开始映射到内存中
但是偏移量需要是4k的整数倍 ,如果是1000,也会返回MAP_FAILED
mmap什么时候会调用失败
length=0
prot只指定了写权限
在调用open的时候可不可以直接使用O_CREAT新建一个文件
可以!但是文件大小不能为0
需要对新创建的文件进行拓展
lseek和truncate来完成拓展操作
mmap后关闭文件描述符,对mmap有影响吗?
没有影响!内存中的映射区还在
没有任何影响,实质上,mmap对fd进行了一个拷贝,就算你的关了,他的还是开着的
对ptr进行越界操作会怎么样
越界操作操作的是非法内存,会出现段错误segment fault