Linux下的IPC-共享内存的使用
来源:互联网 发布:淘宝网中老年休闲男鞋 编辑:程序博客网 时间:2024/06/05 11:03
共享内存是一种最快的IPC方法,除一些特殊情况外,它不能单独使用,需要配合信号量,关于信号量的使用将另文介绍,本文仅讨论共享内存的使用。
就mmap函数本身,使用很简单,下面是一个完整的示例。
#include <sys/mman.h>#include <sys/types.h>#include <fcntl.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct { char name[10]; int age;} person;int main(){ int i; person *p_map; int size; size = 10*sizeof(person); p_map=(person*)mmap(NULL,size,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0); if(fork() == 0) { sleep(2); for(i = 0;i<10;i++) printf("child read: the %d person's age is %d\n",i+1,(*(p_map+i)).age); (*p_map).age = 100; munmap(p_map,size); //实际上,进程终止时,会自动解除映射。 return 0; } for(i = 0;i<10;i++) { sprintf( &((p_map+i).name), “name%d”, i); (*(p_map+i)).age=20+i; } sleep(5); printf( "parent read: the first person,s age is %d\n",(*p_map).age ); munmap( p_map,size ); return 0;}
mmap并不是完全为了用于共享内存而设计的, 它使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。因此,mmap有两个功能:1.将某个真实的文件读入内存,可以频繁读写,在必要时写回磁盘;2.各进程间可以共享映射区域。本文只用到后一个功能。
mmap的定义如下:
void *mmap(void *addr, size_t len, intprot, int flags, int fd, off_t offset);
参数fd为即将映射到进程空间的文件描述字,一般由open()返回,如果fd指定为-1 ,此时须指定flags参数中的MAP_ANON,表明进行的是匿名映射(不涉及具体的文件名,避免了文件的创建及打开,很显然只能用于具有亲缘关系的进程间通信),本文即采用以上的用法。
- Linux下的IPC-共享内存的使用
- Unix/Linux下的IPC---共享内存
- linux下的IPC机制之共享内存
- linux最快的IPC--共享内存
- 【Linux】IPC之间的共享内存
- Linux下IPC共享内存通信
- Linux下IPC主题三----------------共享内存
- Linux进程间通信(IPC)编程实践(七)共享内存的使用-System V共享内存(API)
- Linux进程间通信(IPC)编程实践(八)共享内存的使用-POSIX 共享内存(API)
- linux IPC---共享内存
- Linux进程间通信(IPC)编程实践(六)共享内存的使用-mmap
- Linux编程实践----共享内存的演示(IPC)
- linux基于信号量同步的共享内存IPC实现
- linux 下的内存共享
- Linux下的共享内存
- Linux 下的共享内存
- linux 共享内存的使用
- linux 共享内存的使用
- SQL 两个表根据同一标识更改次表信息
- learning jQuery 学习笔记十三(+jQuery 1.4.1 API)-- DOM操作-基于命令改变页面 ----复制元素及其它
- 集线器,交换机,路由器的用途和区别(超搞笑版)
- redmine-1.2.1完整安装说明
- 表示今天是开学第一天
- Linux下的IPC-共享内存的使用
- 在drupal中开启SSL支持
- 名牌香水
- 开源性能测试工具 - Apache ab 介绍
- testlink与redmine的整合
- gdb 和 watchpoint
- 在Android系统的"图库"中点击某张图片进行分享,在自己的应用程序中如何获取那张图片的路径?
- EJB发布与调用
- Myeclipse切记不要在线update