91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

大數據進程間通信的共享內存是怎樣的

發布時間: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

将乐县| 云和县| 淮南市| 苏尼特左旗| 无为县| 英德市| 桐柏县| 长阳| 顺昌县| 马尔康县| 平陆县| 三穗县| 台北市| 龙海市| 封开县| 巴塘县| 宽甸| 西宁市| 五原县| 黔西县| 五寨县| 介休市| 镇宁| 庄浪县| 上林县| 田林县| 泰和县| 嘉兴市| 定州市| 临夏市| 许昌县| 友谊县| 景洪市| 新干县| 卓尼县| 弋阳县| 航空| 汕头市| 临城县| 清丰县| 正宁县|