Linux 進程間通訊共用記憶體方式

來源:互聯網
上載者:User

  共用記憶體方式:從實體記憶體裡面拿出來一部分作為多個進程共用。

  共用記憶體是進程間共用資料的一種最快的方法,一個進程向共用記憶體地區寫入資料,共用這個記憶體的所有進程都可以立即看到其中內容。

  共用記憶體實現步驟:

  一、建立共用記憶體,使用shmget函數。

  二、映射共用記憶體,將這段建立的共用記憶體映射到具體的進程空間去,使用shmat函數。

  建立共用記憶體shmget:

  intshmget(key_t key, size_t size, int shmflg)

  功能:得到一個共用記憶體標識符或建立一個共用記憶體對象並返回共用記憶體標識符。

  key: 0(IPC_PRIVATE)會建立共用記憶體對象

  size:大於0的整數,建立共用記憶體的大小,以位元組為單位。只擷取共用記憶體時,指定為0.

  shmflg:

  0表示取共用記憶體標識符,如不存在則函數會報錯;

  IPC_CREAT,如果核心中不存在索引值與key相等的共用記憶體時,則建立一個共用記憶體;如果存在這樣的共用記憶體則返回共用記憶體的標識符;

  IPC_CREAT|IPC_EXCL: 如果核心中不存在索引值與key相等的共用記憶體,則建立一個訊息佇列;如果存在這樣的共用記憶體則報錯;

  函數傳回值:成功則返回記憶體的標識符;出錯則返回-1,錯誤原因存在於error中

  映射共用記憶體到調用進程的地址空間shmat:

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

  msqid:共用記憶體標識符

  shmaddr:指定共用記憶體出現在進程記憶體位址的什麼位置,直接指定為NULL讓核心自己決定一個合適的地址位置。

  shmflg: SHM_RDONLY 唯讀模式,其他為讀寫入模式

  函數傳回值:成功則返回附加好的共用記憶體位址;出錯返回-1,錯誤原因存在於error中

  斷開共用記憶體串連shmdt:

  intshmdt(const void *shmaddr)

  功能:傳入shmaddr,串連共用的記憶體起始地址;斷開成功則返回0,出錯則返回-1,錯誤原因存在於error中。

  父子進程間通訊執行個體:

  #include

  #include

  #include

  #include

  #include

  #include

  int main(int argc, char **argv){

  if(argc< 2){ //需要輸入共用的資料

  printf("pleaseinput the shared data.n");

  exit(-1);

  }

  intshmid;

  shmid= shmget(0,1024,IPC_CREAT);

  if(shmid== -1){ // 申請共用記憶體失敗

  printf("createshare memory failed.n");

  exit(-1);

  }

  if(fork()){ // 父進程之中

  char*p_shmaddr;

  p_shmaddr= shmat(shmid, NULL, 0); // 映射到父進程之中的一個地址

  memset(p_shmaddr,0, 1024); // 初始化共用記憶體

  strcpy(p_shmaddr,argv[1]); // 拷貝共用資料到共用記憶體

  wait(NULL); //等待子進程結束

  exit(0);

  }

  else{

  sleep(2); //等待父進程寫入資料

  char*c_shmaddr;

  c_shmaddr= shmat(shmid,NULL,0); // 映射到子進程之中一個地址,具體由kernel 指配

  printf("theshare data is: %sn", c_shmaddr); //子進程輸出共用的資料

  exit(0);

  }

  }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.