共享存储映射mmap

Posted 阿龙亡命天涯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了共享存储映射mmap相关的知识,希望对你有一定的参考价值。




#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
//存储映射
int main()

	int fd=-1;
	int ret=-1;
	void* addr=NULL;
	//1.以读写的方式打开一个文件
	fd=open("txt",O_RDWD);
	if(-1==fd)
	
		perroe("open");
		return 1;
	
	//2.将文件映射到内存
	addr=mmap(NULL,1024,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
	if(addr==MAP_FAILED)
	
		perror("mmap");
		return 1;
	
	printf("文件存储映射ok...\\n");
	
	//3. 关闭文件
	close(fd);
	//4.写文件
	mmecpy(addr,"1234567890",10);
	//5.断开存储映射
	munmap(addr,1024);

将txt文件写入1234567890

父子进程使用存储映射通信:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
//存储映射
int main()

	int fd=-1;
	int ret=-1;
	void* addr=NULL;
	//1.以读写的方式打开一个文件
	fd=open("txt",O_RDWD);
	if(-1==fd)
	
		perroe("open");
		return 1;
	
	//2.将文件映射到内存
	addr=mmap(NULL,1024,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
	if(addr==MAP_FAILED)
	
		perror("mmap");
		return 1;
	
	printf("文件存储映射ok...\\n");
	
	//3. 关闭文件
	close(fd);
	//4.创建一个子进程
	pid=fork();
	if(-1==pid)
	
		perror("fork");
		return 1;
	
	//子进程
	if(0==pid)
	
		//5.写文件
		memcpy(addr,"ABCDEFGHIG",10);
	
	else
	
		//父进程
		//等待子进程结束
		wait(NULL);
		printf("addr:%s\\n",(char *)addr);
	
	
	//6.断开存储映射
	munmap(addr,1024);

====

以上是关于共享存储映射mmap的主要内容,如果未能解决你的问题,请参考以下文章

共享存储映射mmap

共享内存之——mmap内存映射

linux共享内存和mmap的区别

进程间通信---mmap详解(与system V ipc通信对照)

mmap和shm共享内存的区别和联系

内存映射mmap 和 共享内存