千家信息网

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

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本篇文章给大家分享的是有关大数据进程间通信的共享内存是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。共享内存:用于进程之间的数据传
千家信息网最后更新 2025年02月01日大数据进程间通信的共享内存是怎样的

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

共享内存:

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

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

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

图形理解共享内存:

#include

#include

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  2 #include  3 #include  4 #include  5 #include  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也可以读到内容将其显示在显示器上。这样实现了不同进程之间的通信,通过共享内存。

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

0