进程通信之内存共享篇

author author     2022-08-25     686

关键词:

   进程通信之_ 内存共享

 

概念:共享内存是被多个进程共享的一部分物理内存。共享内存是进程间的共享数最快的方法,一个进程向共享内存区域写入数据,共享这个内存区域的所有进程就可以写入数据,所有进程就可以立刻看到其中的内容。


实现步骤;
1、创建共享内存,使用shmget函数
2、映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数

创建:
int shmget (key_t key,int size,int shmflg)
key 标识内存功效的键值0/ipc_private.
成功返回内存标识符;如果失败,返回-1;

 

映射:

int shmat(int shmid,char *shmaddr,int flag)
参数:
shmid:shmget函数返回的共享存储标识符
flag :决定以什么方式来影射地址
创建成功返回内存映射地址,失败返回-1;
int shmdt(cha *shmaddr)

 

/*******************实现代码**********************/

//父进程创建一个共享内存区域,向其内写入数据,。

//之后子函数对其共享空间应用

/*****time:2017.3.19 authr :zhangting ****/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>

#define PERM S_IRUSR|S_IWUSR


/* 共享内存 */

int main(int argc,char **argv)
{
         int shmid;
         char *p_addr,*c_addr;
 
         if(argc!=2)
             {
                  fprintf(stderr,"Usage:%s a",argv[0]);
                  exit(1);
             }

 

     /* 创建共享内存 */ 
     if((shmid=shmget(IPC_PRIVATE,1024,PERM))==-1)


             {
                      fprintf(stderr,"Create Share Memory Error:%s a",strerror(errno));
                      exit(1);
             }

     /* 创建子进程 */


 if(fork()) // 父进程写
     {
          p_addr=shmat(shmid,0,0);  //创建内存把内存的地址赋值给p_addr
         memset(p_addr,‘‘,1024);    //初始化内存地址空间
          strncpy(p_addr,argv[1],1024);  //把参数复制给申请的内存空间
          wait(NULL);                  // 释放资源,不关心终止状态
          exit(0);
     }
 else                                        // 子进程读
     {
      sleep(1); // 暂停1秒  
        c_addr=shmat(shmid,0,0);
      printf("Client get %p ",c_addr);
          exit(0);
     }
}

 

java进程通信之映像文件共享内存(代码片段)

Java进程通信之映像文件共享内存  1.共享内存vs进程通信  对UNIX系统来说,共享内存分为一般共享内存和映像文件共享内存两种.但windows实际上只有影像文件共享内存一种.  而说到进程通信,First当然是Socket通信,但缺点太明... 查看详情

[linux]进程间通信之共享内存

在上篇博文我们了解了通过管道完成进程间通信,我们了解匿名管道和命名管道,并且通过编码模拟实现使用了匿名管道和命名管道。我们知道要让进程间完成通信必须让这两个进程首先看到同一份资源,因此给予这个前提,本... 查看详情

linux之进程间通信(代码片段)

进程间通信文章目录进程间通信进程间通信的目的进程间通信分类管道什么是管道匿名管道pipe函数用fork来共享管道原理站在文件描述符角度理解管道管道读写规则管道的特性命名管道systemV共享内存共享内存的基本原理申请共享... 查看详情

如何创建一个新进程并使用共享内存与之通信

】如何创建一个新进程并使用共享内存与之通信【英文标题】:Howtocreateanewprocessandcommunicatewiththatusingsharedmemory【发布时间】:2011-08-2418:14:21【问题描述】:您好,我正在尝试创建一个应用程序1,它接受输入数据“helloworld”。我... 查看详情

unixipc之共享内存(代码片段)

...术往往与其他通信机制(如信号量)结合使用,用于达到进程间的同步及互斥。原理:这种方式是在所有进程的独立空间之外开辟一块内存空间,它不属于任何一个进程,当所有进程都可以访问。利用这样的共享特性,发送进程... 查看详情

进程间通信(ipc)之共享内存

...内存(ShareMemory)以及套接字(Socket)。进程间通信主要包括了管道、系统IPC(包括了消息队列、信号以及共享存储)、套接字(Socketÿ 查看详情

深入详解linux进程间通信之共享内存(sharedmemory)

在Linux下的多个进程间的通信机制叫做IPC(Inter-ProcessCommunication),它是多个进程之间相互沟通的一种方法。专栏前面的文章中演示过使用pipe、sharedmemory、unixdomainsocket进行IPC的方法。彼时,我们的重点在于unixdomainsocket。因此,... 查看详情

深入详解linux进程间通信之共享内存(sharedmemory)

在Linux下的多个进程间的通信机制叫做IPC(Inter-ProcessCommunication),它是多个进程之间相互沟通的一种方法。专栏前面的文章中演示过使用pipe、sharedmemory、unixdomainsocket进行IPC的方法。彼时,我们的重点在于unixdomainsocket。因此,... 查看详情

linux之进程通信——共享内存

目录🌳.共享内存的机制🌳.创建共享内存🍎.shmget函数🍎.ftok函数🍎.shmctl函数  🍎.shmat函数🍎.shmdt函数🍎.代码实例🌳.区分key值和shmid🍎.管道的方式进行通信往期linux文章🌳.共享内 查看详情

进程通信之概述

进程是系统资源分配的最小单位,不同进程之间有独立的内存空间,所以进程之间的交流必须依靠进程间通信(IPC),以实现资源共享、数据传输等功能。进程间通信方式管道:实现一个用于进程数据读写的管道实体,进程从管... 查看详情

五十进程间通信——systemvipc之共享内存(代码片段)

50.1共享内存50.1.1共享内存的概念共享内存区域是被多个进程共享的一部分物理内存多个进程都可把该共享内存映射到自己的虚拟内存空间。所有用户空间的进程若要操作共享内存,都要将其映射到自己虚拟内存空间中,通过映... 查看详情

交易系统开发技能及面试之进程间通信(共享内存)

文章目录摘要Q1当最后一个附加到共享内存的进程意外退出时,会发生什么?Q2为什么内存共享是最快的进程通讯方式?Q3可以在运行时调整共享内存大小么?Q4使用mmap实现进程间通讯有什么优点?当一个进程... 查看详情

深入详解linux进程间通信之共享内存(sharedmemory)

在Linux下的多个进程间的通信机制叫做IPC(Inter-ProcessCommunication),它是多个进程之间相互沟通的一种方法。专栏前面的文章中演示过使用pipe、sharedmemory、unixdomainsocket进行IPC的方法。彼时,我们的重点在于unixdomainsocket。因此,... 查看详情

android进程间通信之共享内存的使用(代码片段)

前言Android提供了几种进程间通信的方式,除了Socket,基本都是基于binder实现的。为什么要用共享内存来实现呢?因为binder传输数据被限制在1M-8k,在较大的数据交换一般会使用文件,但效率非常的低,因此... 查看详情

android进程间通信之共享内存的使用(代码片段)

前言Android提供了几种进程间通信的方式,除了Socket,基本都是基于binder实现的。为什么要用共享内存来实现呢?因为binder传输数据被限制在1M-8k,在较大的数据交换一般会使用文件,但效率非常的低,因此... 查看详情

linux进程通信实验(共享内存通信,接上篇)

...存机制有一定的了解,同时也需要了解POSIX信号量来实现进程间的同步。可以参考以下两篇博客:https://blog.csdn.net/sicofield/article/details/10897091https://blog.csdn.net/ljianhui/article/details/10253345实验要求:编写sender和receiver程序,sender创建一... 查看详情

深入详解linux进程间通信之共享内存(sharedmemory)+信号量同步(代码片段)

在Linux下的多个进程间的通信机制叫做IPC(Inter-ProcessCommunication),它是多个进程之间相互沟通的一种方法。专栏前面的文章中演示过使用sharedmemory进行IPC的方法。本文将更进一步探讨Linux进程间通过共享内容进行通信的方法,包... 查看详情

深入详解linux进程间通信之共享内存(sharedmemory)+信号量同步(代码片段)

在Linux下的多个进程间的通信机制叫做IPC(Inter-ProcessCommunication),它是多个进程之间相互沟通的一种方法。专栏前面的文章中演示过使用sharedmemory进行IPC的方法。本文将更进一步探讨Linux进程间通过共享内容进行通信的方法,包... 查看详情