文档章节

共享内存使用

兔之
 兔之
发布于 03/04 20:17
字数 210
阅读 0
收藏 0

写内存

#include <sys/mman.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>

typedef struct{
  char name[4];
  int  age;
} people;

main(int argc, char** argv)
{
	int fd,i;
	people *p_map;
	char temp;
	
	fd=open(argv[1], O_CREAT|O_RDWR|O_TRUNC, 00777);
	lseek(fd, sizeof(people)*5-1, SEEK_SET);
	write(fd,"",1);
	
	p_map = (people*) mmap( NULL,sizeof(people)*10,PROT_READ|PROT_WRITE,
        MAP_SHARED,fd,0 );
	close( fd );
	temp = 'a';
	for (i=0; i<10; i++) {
		temp += 1;
		memcpy(( *(p_map+i) ).name, &temp,2 );
		(*(p_map+i) ).age = 20+i;
	}
	printf(" initialize over \n ");
	sleep(10);
	munmap( p_map, sizeof(people)*10 );
	printf( "umap ok \n" );
}

读内存

#include <sys/mman.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>

typedef struct{
  char name[4];
  int  age;
} people;

main(int argc, char** argv) 
{
	int fd,i;
	people *p_map;
	fd = open(argv[1], O_CREAT|O_RDWR, 00777);
	p_map = (people*)mmap(NULL, sizeof(people)*10, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
	for (i = 0; i<10; i++)
	{
		printf( "name: %s age %d;\n",(*(p_map+i)).name, (*(p_map+i)).age );
	}
	munmap( p_map,sizeof(people)*10 );
}

© 著作权归作者所有

兔之

兔之

粉丝 68
博文 250
码字总数 96477
作品 7
深圳
程序员
私信 提问
Linux 程序设计1:深入浅出 Linux 共享内存

笔者最近在阅读Aerospike 论文时,发现了Aerospike是利用了Linux 共享内存机制来实现的存储索引快速重建的。这种方式比传统利用索引文件进行快速重启的方式大大提高了效率。(减少了磁盘 i/...

LeeHappen
01/02
0
0
【Qt笔记】进程间通信

上一章我们了解了有关进程的基本知识。我们将进程理解为相互独立的正在运行的程序。由于二者是相互独立的,就存在交互的可能性,也就是我们所说的进程间通信(Inter-Process Communication,...

大道无名
2016/09/11
147
0
PHP 直接在共享内存中存储数据集

概述 共享内存是一种在相同机器中的应用程序之间交换数据的有效方式。一个进程可创建一个可供其他进程访问的内存段,只要它分配了正确的权限。每个内存段拥有一个惟一的 ID(称为 shmid),这...

mot_evans
2013/09/28
120
3
Linux进程间通信之共享内存

进程间通信之共享内存 一、什么是共享内存 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进...

duanjiatao
2018/06/26
0
0
LINUX-进程间通信(三、共享存储)

LINUX进程间通信 一、匿名管道与命名管道 二、消息队列 三、共享存储 共享存储概述: 共享存储允许两个或更多进程共享一给定的存储区。共享内存区是最快的IPC形式,一旦这样的内存映射到共享...

sssssuuuuu666
2017/12/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java 8 Stream Api 中的 skip 和 limit 操作

1. 前言 Java 8 Stream API 中的skip()和limit()方法具有类似的作用。它们都是对流进行裁剪的中间方法。今天我们来探讨一下这两个方法。 2. skip() skip(lang n) 是一个跳过前 n 个元素的...

码农小胖哥
33分钟前
1
0
看中华小当家第二集片段记录

最近正好在学习做饭,看看这片子,燃烧燃烧做饭的热情 哈哈,以下是摘的一些句子和个人理解 My name is Liu Mao Xing . More commonly known as Mao. 个人理解:我的名字叫 刘昴星, (commo...

T型人才追梦者
37分钟前
3
0
Python基础-6

1、注释 # 单行注释'''多行注释'''"""多行注释"""# 中文编码声明注释 ,在文件开头加上下面这行注释# encoding=utf-8或者# -*- encoding:utf-8 -*- (-*- 只是为了美观,没有实际......

zfskkk
38分钟前
5
0
我的这半年 / 2018 七夕著

浑然不觉,竟已至七夕, 今年已经过了一半 , 突然想给自己记录点什么 , 回顾下我的2018, 我的这上半年. 2018的第一件记事得从一月份下旬的那场大雪说起 , 一觉醒来 , 窗外整个银装素裹 , 在此之...

gxLong
42分钟前
3
0
NSS支持的数据库

NSS,简写自Name Service Switch。我把它译为“名字服务中心”。 在*nix操作系统中,NSS是C语言库(Library C或者glibc)的一部分,用以寻找名字。比如说,我们运行ls -lh查看一个目录中的文...

大别阿郎
58分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部