温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

大数据进程间通信的共享内存是怎样的

发布时间:2022-01-11 10:08:45 来源:亿速云 阅读:109 作者:柒染 栏目:编程语言

本篇文章给大家分享的是有关大数据进程间通信的共享内存是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

共享内存:

 用于进程之间的数据传递,是system v版本中最高效的,但是它不会同步与互斥,所以常与信号量搭配使用。

nattch:表示有多少个进程挂接在共享内存上。要查看其值用 ipcs -m 命令

大数据进程间通信的共享内存是怎样的

删除key值用 ipcrm -m +key值;

图形理解共享内存:

大数据进程间通信的共享内存是怎样的

#include <sys/types.h>

#include <sys/shm.h>

1.创建共享内存函数:

int shget(key_t key,size_t size, int shmflg* buf);

    第二个参数是其大小,一般为4k 即4096的整数倍;

     第三个参数一般为:IPC_CREAT|IPC_EXCL;

2.销毁共享内存的函数:

int shmctl(int shm _id,int cmd,int shmflg* buf);

 第二个参数一般为:IPC_RMID;

3.挂接在共享内存上:

void *shmat(int shmid, const void *shmaddr, int shmflg);

4.去关联共享内存

int shmdt(const void *shmaddr);

共享内存实现代码:

//comm.h

  1 #include<stdio.h>
  2 #include<sys/ipc.h>
  3 #include<sys/shm.h>
  4 #include<stdlib.h>
  5 #include<unistd.h>
  6 #define  _PATH_ "."
  7 #define  _PROJ_ID_ 0X7777
  8 #define  _SIZE_  4096
  9 int shm_create()
 10 {
 11    key_t key=ftok(_PATH_, _PROJ_ID_);
 12     if(key<0)
 13       {
 14          perror("ftok");
 15          return -1;
 16       }
 17     int shm_id=shmget(key,_SIZE_,IPC_CREAT|IPC_EXCL|0666);
 18      if(shm_id<0)
 19      {
 20       perror("shmget");
 21       return -1;
 22       }
 23     return shm_id;
 24 }
 25 
 26 int shm_get()
 27 {
 28 
 29 
 30    key_t key=ftok(_PATH_, _PROJ_ID_);
 31     if(key<0)
 32       {
 33          perror("ftok");
 34          return -1;
 35       }
 36     int shm_id=shmget(key,_SIZE_,IPC_CREAT);//得到的是已创建好的
 37      if(shm_id<0)
 38      {
 39       perror("shmget");
 40       return -1;
 41       }
 42     return shm_id;
 43 
 44 }
 
 //server.c
 
  1 #include"comm.h"
  2 
  3 int main()
  4 {
  5   int shm_id=shm_create();
  6   sleep(10);
  7  char *start=at_shm(shm_id);
  8  int i;
  9  for(i=0;i<20;++i)
 10   {
 11 
 12     printf("%s\n",start);
 13     sleep(1);
 14 
 15    }
 16  dt_shm(start);
 17  shm_destroy(shm_id);
 18  return 0;
 19 }

//client.c

  1 #include"comm.h"
  2 
  3 int main()
  4 {
  5   int shm_id=shm_get();
  6   sleep(5);
  7   char *start=at_shm(shm_id);
  8   int i;
  9   for(i=0;i<20;++i)
 10   {
 11    start[i]='A';
 12    start[i+1]='\0';
 13    }
 14  sleep(7);
 15  dt_shm(start);
 16  sleep(12);
 17  return 0;
 18 
 19 
 20 
 21 
 22 }

 //Makefile
   1 .PHONY:all
  2 all:server client
  3 server:server.c
  4         gcc -o $@ $^
  5 client:client.c
  6         gcc -o $@ $^
  7 .PHONY:clean
  8 clean:
  9         rm -f server client

大数据进程间通信的共享内存是怎样的

结果分析:
当server.c 运行起来时显示器上没有东西,当client.c运行起来打印东西时,这时的server也可以读到内容将其显示在显示器上。这样实现了不同进程之间的通信,通过共享内存。

以上就是大数据进程间通信的共享内存是怎样的,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI