LinuxC/C++编程(9)—映射内存

原创 2016年06月01日 11:14:33
简单来说,映射内存,就是创建硬盘文件到进程地址空间的映射,在进程中读写这段映射内存,可以向硬盘文件中直接同步。
利用这点,映射内存也可以像共享内存一样,用来进行不同进程之间的通信。(但共享内存的效率较高,因为不需要任何复制粘帖操作,而映射内存,所产生的只是内存到硬盘中的一个映射,所以比较节省内存开销,可以创建一个空间很大的映射内存区来满足进程间通信的要求)

内存映射是Linux中一种很有特色的机制,有空再更一下原理,先贴示例代码:

#include <iostream>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/sem.h>
#include <sys/fcntl.h>
#include <string.h>
using namespace std;

int main()
{
	string path = "test";
	int fd;
	if ((fd = open(path.c_str(), O_RDWR | O_CREAT, S_IRWXU)) == -1)
	{
		cerr << "open file fail!" << endl;
		return -1;
	}

	lseek(fd, 100, SEEK_SET);//lseek可以让文件产生“空洞”
	write(fd, "", 1);
	lseek(fd, 0, SEEK_SET);

	char *fileMemory;
	if ((fileMemory = (char*)mmap(0, 100, PROT_WRITE | PROT_READ, MAP_SHARED, fd, 0)) == NULL) //创建一个4096字节的映射内存
	{
		cerr << "create mmap fail!" << endl;
		return -1;
	}

	if (close(fd) == -1) //创建映射内存完毕,必须观赏文件描述符
	{
		cerr << "close file fail!" << endl;
		return -1;
	}

	char test[10] = "heiheihei";
	strcpy(fileMemory, test);

	if (munmap(fileMemory, 100) == -1)
	{
		cerr << "munmap fail!" << endl;
		return -1;
	}

	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++编程趣题1 在1~9中间填符号使运算结果等于100

在1 2 3 4 5 6 7 8 9九个数字中插入“+”或“-”使其运行得到100

C++编程练习(9)----“图的存储结构以及图的遍历“(邻接矩阵、深度优先遍历、广度优先遍历)

图的存储结构 1)邻接矩阵 用两个数组来表示图,一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中边或弧的信息。 2)邻接表 3)十字链表 4)邻接多重表 5)边集数组 本文只用代码实现用...

Google C++编程规范(一)————(头文件篇)

开始在csdn上写一些文章了; 就拿《Google C++ Style Guide》开刀吧 :);本文不是完全一字一句对应翻译。而是本人边看边写个人理解。 头文件(Header Files)  一般来...

从Java到C++ — 对比Java与C++编程的不同

原作:Cay Horstmann 英文原文 翻译:Aqua  prglab.com 注:很多程序员包括本人在内都是先学会的Java,然后才学的C++,其实C++与Java有很多相似和互...

C++编程思想学习—初始化与清除

1、构造与析构函数 c++中为了确保对象能够在使用之前初始化,再离开对象的作用域(同变量的作用域范围是一样的)时确保清楚它,C++的对象中添加了构造和析构函数用于实现上面的功能。构造和析构函数,由编...

C++编程守则—尽量以const,enum,inline替换#define

C++编程守则—尽量以const,enum,inline替换#define简介遵循守则,养成良好的编程习惯。该规则主要摘抄总结自《Effective C++》这本书,也许把题目改为“宁可以编译器替换预...

C++编程思想学习—函数重载与默认函数

1、函数重载        C++中可以用相同的函数名但是参数列表不同来区分函数。编译器连接时会修饰这些名字、类型、范围来产生内部的名字供连接器使用。但是由于返回值对于函数的调用不是必须的,有些函数...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)