mmap
void *mmap(void* addr, size_t length, int prot, int flags, int fd, off_t offset) // 创建共享内存映射
参数:
addr: 指定映射区的首地址。通常传NULL,表示让系统自动分配;
length:共享内存映射区的大小;(<= 文件的实际大小)
prot:共享内存映射区的读写属性; PROT_READ、PROT_WRITE、PROT_READ | PROT_WRITE
flags:标注共享内存的共享属性;MAP_SHARED、MAP_PRIVATE
fd:用于创建共享内存映射区的那个文件的 文件描述符;
offset:偏移位置,默认0,表示文件全部。必须是4K的整数倍返回值:
成功:映射区的首地址;
失败:MAP_FAILED((void*)-1),errno
munmap
int munmap(void* addr, size_t length); // 释放映射区
参数:
addr:mmap 的返回值;
length:大小
返回值:
成功:0;
失败:-1。
代码
#include<stdio.h>
#include<fcntl.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/mman.h>
int main(int argc, char* argv[])
{
int fd;
char* p=NULL;
fd=open("testmap", O_RDWR|O_CREAT|O_TRUNC, 0664);
if(fd==-1){
perror("open error");
}
/*
lseek(fd, 10, SEEK_END); // 扩展文件大小
write(fd, "\0", 1);
*/
ftruncate(fd, 20); // 需要写权限才能扩展文件大小
int len=lseek(fd, 0, SEEK_END);
p=mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
if(p

最低0.47元/天 解锁文章
415

被折叠的 条评论
为什么被折叠?



