linux共享内存通信方式,linux下进程通信方式--共享内存
1、概念
不同进程看到共同区域
2、特点
(1)是进程间通信最快的方式,对不同内存的映射(少了两次拷贝)
(2)不提供任何同步互斥机制,也不自己维护
(3)接口简单
3、通信方式
由文件系统提供--管道
由system V提供--消息队列、信号量、共享内存
共享内存与信号量搭配使用
4、实现shmat、shmdt
at:挂接 dt:去挂接
0
1
2
1
0
创建
挂接
被另一进程看到
退出
再退出
代码实现:
shm.h文件:
#ifndef __SHM__
#define __SHM__
#include
#include
#include
#include
#include
#define __PATH__ "."
#define __PROJECT__ 8888
#define __SHM_SIZE__ 4096
int get_shm();
char* at_shm();
int delete_shm();
int rm_shm();
#endif
shm.c文件:
#include"shm.h"
int get_shm()
{
key_t key=ftok(__PATH__,__PROJECT__);
int flag=IPC_CREAT|0666;
int shm_id=shmget(key,__SHM_SIZE__,flag);
if(shm_id==-1){
printf("get share memory error!\n");
}else{
printf("get share memory success!\n");
}
return shm_id;
}
char *at_shm(int shm_id)
{
return(char*)shmat(shm_id,NULL,0);
}
int delete_shm(char *addr)
{
return shmdt(addr);
}
//if success,return(),else return -1
int rm_shm(int shm_id)
{
return shmctl(shm_id,IPC_RMID,NULL);
}
test_shm.c文件:
#include"shm.h"
int main()
{
int shm_id=get_shm();
pid_t id=fork();
if(id<0){
printf("fork error\n");
return 1;
}else if(id==0){//child
char *buf=at_shm(shm_id);
int i=0;
while(i<4096){
buf[i]='X';
i++;
}
buf[4096]='\0';
delete_shm(buf);
}else{ //father
char *buf=at_shm(shm_id);
sleep(5);
printf("%S\n",buf);
delete_shm(buf);
waitpid(id,NULL,0);
rm_shm(shm_id);
}
return 0;
}
Makefile文件:
test_shm:shm.c test_shm.c
gcc -o $@ $^
.PHONY:clean
clean
rm -f test_shm
运行结果:
[zr@localhost shm]$ make
gcc -o test_shm shm.c test_shm.c
[zr@localhost shm]$ ./test_shm
get share memory success!
[zr@localhost shm]$
linux共享内存通信方式,linux下进程通信方式--共享内存相关推荐
- linux ps内存占用率,linux ps命令,查看某进程cpu和内存占用率情况, linux ps命令,查看进程cpu和内存占用率排序。 不指定...
背景:有时需要单看某个进程的CPU及占用情况,有时需要看整体进程的一个占用情况. 一. linux ps命令,查看某进程cpu和内存占用率情况 [root@test vhost]# ps aux US ...
- 使用内存映射文件在进程之间共享数据
数据共享方法是通过让两个或多个进程映射同一个文件映射对象的视图来实现的,这意味着它们将共享物理存储器的同一个页面.因此,当一个进程将数据写入一个共享文件映射对象的视图时,其他进程可以立即看到它们视图中 ...
- Linux下进程通信---共享内存之:shm
进程通信:进程与进程间的数据交换,称为进程通信.进程通讯的方式有:共享内存.信号量.管道.消息队列.socket等等. 共享内存:内核管理一片物理内存,允许不同的进程同时映射,多个进程可以映射同一块内 ...
- xp计算机怎么共享网络,windows XP下如何实现共享上网的方法
通常来说共享本地连接的电脑即网关电脑要有两块网卡(其中一块是有线或无线网卡),并且有交换机或集线器等网络设备,电脑与电脑之间通过网络设备或无线局域网连接下面是学习啦小编为大家整理的关于windows ...
- linux 系统日志 查看被杀掉的进程(占用内存过大)
基本概念: Linux 内核有个机制叫OOM killer(Out Of Memory killer),该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存耗尽而自动把该进程杀掉. ...
- linux java 进程内存_linux – 在java进程中消耗内存的是什么?
我们正在尝试在中等负载下研究 java进程的内存使用情况. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 12663 test 20 0 ...
- 操作系统核心原理-5.内存管理(下):段式内存管理
一.分页系统的缺点 分页系统存在的一个无法容忍,同时也是分页系统无法解决的一个缺点就是:一个进程只能占有一个虚拟地址空间.在此种限制下,一个程序的大小至多只能和虚拟空间一样大,其所有内容都必须从这个共 ...
- linux共享内存示例,linux 进程间共享内存示例
写入端: #include #include #include #include #include using namespace std; struct MappingDataType { int ...
- 进程间的通信方式(一):共享内存
共享内存指 (shared memory)在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存.由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存(Cache).任何一个缓 ...
最新文章
- 推荐7个能提高工作效率的办公软件,拯救你的工作!
- TensorFlow 图像数据预处理及可视化
- python科学计算三剑客_《Python数据分析三剑客:Pandas、Numpy、Matplotlib》专题
- DVWA 黑客攻防实战(十五) 绕过内容安全策略 Content Security Policy (CSP) Bypass
- SSD 通俗易懂介绍
- RMI non-JRMP server at remote endpoint
- 关于App开发:模拟服务器数据接口 - MockApi
- python删除文本中指定内容_Python实现删除文件中含“指定内容”的行示例
- [转载]MVP(SC),MVP(PV),PM,MVVM 和 MVC 表现模式架构对比
- 如何交到一个女朋友?
- ac2100 反弹shell无法粘贴_记一次突破反弹shell
- POJ 1947 Rebuilding Roads (树dp + 背包思想)
- 盒子模型(W3C盒子和IE盒子)
- 设置c++程序的堆栈空间解决栈溢出问题
- HP服务器集成 iLO 端口的配置
- matlab多种图像边缘检测方法,[转载]Matlab多种图像边缘检测方法
- 微信公众账号分为哪几类?区别是什么?
- Java实现蓝桥杯快乐数
- ie下js判断本地office版本
- java.net.ConnectException: [NACOS HTTP-POST] The maximum number of tolerable server reconnection err