linux中的共享内存实现进程间通信
2018-04-02 14:59
901 查看
一、linux中进程间通信的实现方法
《1》管道(1)匿名管道(无名管道):实现有关系的进程间的通信
(2)命名管道(有名管道):任意两进程间通信
详情见:
https://blog.csdn.net/dai_wen/article/details/79777984
《2》共享内存
在内存中开辟一段共享内存空间,共不同进程间访问;
二、共享内存实现进程间通信
《1》创建共享内存:int shmget(key_t key ,size_t size,int shm_flg); //key_t key:共享内存标识号,可以写为IPC_PRIVATE,代表让系统分配一个本地的IPC值 //size_t size:共享内存的大小 //int shm_flg:给共享内存的权限(3位八进制)
//创建共享内存 #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> int main(int arg, char* args[]) { int shmid = shmget(IPC_PRIVATE, 1024, 0666 );//在内存中创建共享内存 if(shmid < 0) { printf("error\n"); } else { printf("success\n"); } return 0; }
注意:这里出现了一个新的命令,ipcs -m,显示已经成功创建的共享内存
可以看出已经成功创建一个共享内存,其shmid为819219;共享它的进程数nattch为0
《2》附加共享内存区
void* shmat(int shmid,const* shmaddr,int shmflg) //int shmid:已经成功创建的shmid的标识号 //const* shmaddr: 创建附加共享内存区的地址,一般为0,代表操作系统开辟一段空间 //int shmflg,一般为0,代表可读可写
《3》释放附加共享内存地址
int shmdt(const void* shmaddr) //const void* shmaddr: 附加空间的地址
//附加上共享内存段 #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> int main(int arg, char* args[]) { char*shmbuf; int shmid = 0; if(arg > 1) { shmid = atoi(args[1]); shmbuf = shmat(shmid, 0, 0); sleep(60); shmdt(shmbuf); } return 0; }
《4》共享内存读写的例子
//共享内存读写 #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> int main(int arg, char* args[]) { char* shmbuf; int shmid = 0; if(arg> 2) { shmid = atoi(args[1]);//通过参数得到共享内存ID号 shmbuf = shmat(shmid ,0, 0);//将附加内存加到该共享内存 if(atoi(args[2]) == 1)//设置1为写 { scanf("%s",shmbuf); } if(atoi(args[2]) ==2 )//2为读 { printf("%s\n",shmbuf); } shmdt(shmbuf);//释放本地地址 } return 0; }
相关文章推荐
- Windows or Linux环境下利用“共享内存”实现进程间通信的C/C++代码
- Linux进程间通信 共享内存实现
- Linux下通过共享内存进行进程间通信,进程间同步使用信号量来实现
- Linux下通过共享内存进行进程间通信,进程间同步使用信号量来实现
- Linux环境进程间通信(五): 共享内存(下)
- Linux环境进程间通信:共享内存
- Linux环境进程间通信:共享内存
- Linux环境进程间通信(五): 共享内存
- Linux环境进程间通信(五): 共享内存(上)
- linux下的简单共享内存map实现
- Linux环境进程间通信(五): 共享内存(下)
- 摘录:利用共享内存实现进程间通信
- Linux环境进程间通信(五): 共享内存(上)
- Linux环境进程间通信(五): 共享内存(下)
- Linux环境进程间通信 共享内存
- Linux环境进程间通信系列(五):共享内存
- Linux环境进程间通信: 共享内存
- Linux环境进程间通信(五): 共享内存(下)
- Linux环境进程间通信(五): 共享内存(上)
- Linux环境进程间通信(五): 共享内存(下)