日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

进程之间通信 共享内存

發(fā)布時(shí)間:2023/12/13 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 进程之间通信 共享内存 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

命令?

  • ?ipcs 命令查看共享內(nèi)存、消息隊(duì)列、管道等相關(guān)信息
  • ipcs -m 查看共享內(nèi)存的信息

代碼

  • 創(chuàng)建共享內(nèi)存
  • 共享內(nèi)存 關(guān)聯(lián) 進(jìn)程
  • 分離共享內(nèi)存
  • 刪除共享內(nèi)存
#include <sys/shm.h> #include <iostream>#define BUF_SIZE 1024int main() {int share_id = 0;//創(chuàng)建共享內(nèi)存if ((share_id = shmget(IPC_PRIVATE,BUF_SIZE,0666))<0){//IPC_PRIVATE 系統(tǒng)分配管理,其key以0x00000000標(biāo)識perror("shmget error!");exit(1);} else{printf("created shared-memory:%d\n",share_id);system("ipcs -m");}//共享內(nèi)存 關(guān)聯(lián) 邏輯指針void *share_add;if((share_add = shmat(share_id,0,0)) < (void *)0){perror("shmat error!");exit(1);}else{printf("attached shared-memory!\n");system("ipcs -m");}//分離共享內(nèi)存if((shmdt(share_add))<0){perror("shmdt error!");exit(1);}else{printf("separate shared-memory!\n");system("ipcs -m");}//刪除共享內(nèi)存if ((shmctl(share_id,IPC_RMID,0))<0){perror("shmctl error!");exit(1);}else{printf("release shared-memory!\n");system("ipcs -m");}return 0; }

?

?代碼

  • 服務(wù)器產(chǎn)生數(shù)據(jù),客戶端輸出數(shù)據(jù),服務(wù)器和客戶端使用相同的共享內(nèi)存

服務(wù)器

#include <sys/shm.h> #include <iostream> #include <unistd.h>#define BUF_SIZE 1024struct sys_data{float data_rh;float data_t; }; int main(int argc,char* argv[]) {int share_id = 0;struct sys_data *struct_data{};//創(chuàng)建共享內(nèi)存share_id = shmget((key_t)45958023,sizeof (sys_data),0666|IPC_CREAT);if (share_id == -1){perror("shmget error!");exit(-1);}else{printf("created shared-memory:%d\n",share_id);}//共享內(nèi)存 關(guān)聯(lián) 邏輯指針void *share_add;share_add = shmat(share_id,0,0);if (share_id == -1){perror("shmat error!");exit(-1);}float f_temp{};float f_humi{};struct_data = reinterpret_cast<struct sys_data *>(share_add);while (1){f_temp = rand() % 100;f_humi = rand() % 100;struct_data->data_rh = f_humi;struct_data->data_t = f_temp;sleep(1);} // //分離共享內(nèi)存 // if((shmdt(share_add))<0){ // perror("shmdt error!"); // exit(1); // } // //刪除共享內(nèi)存 // if ((shmctl(share_id,IPC_RMID,0))<0){ // perror("shmctl error!"); // exit(1); // }else{ // printf("release shared-memory!\n"); // system("ipcs -m"); // }return 0; }

客戶端

#include <sys/shm.h> #include <iostream> #include <unistd.h>#define BUF_SIZE 1024struct sys_data{float data_rh;float data_t; }; int main(int argc,char* argv[]) {int share_id = 0;struct sys_data *struct_data{};//創(chuàng)建共享內(nèi)存share_id = shmget((key_t)45958023,sizeof (sys_data),0666|IPC_CREAT);if (share_id == -1){perror("shmget error!");exit(-1);}else{printf("created shared-memory:%d\n",share_id);}//共享內(nèi)存 關(guān)聯(lián) 邏輯指針void *share_add;share_add = shmat(share_id,0,0);if (share_id == -1){perror("shmat error!");exit(-1);}float f_temp{};float f_humi{};struct_data = reinterpret_cast<struct sys_data *>(share_add);while (1){sleep(2);printf("temp = %.lf,humi = %.lf\n",struct_data->data_t,struct_data->data_rh);} // //分離共享內(nèi)存 // if((shmdt(share_add))<0){ // perror("shmdt error!"); // exit(1); // } // //刪除共享內(nèi)存 // if ((shmctl(share_id,IPC_RMID,0))<0){ // perror("shmctl error!"); // exit(1); // }else{ // printf("release shared-memory!\n"); // system("ipcs -m"); // }return 0; }

?參考鏈接

  • 共享內(nèi)存函數(shù)(shmget、shmat、shmdt、shmctl)及其范例

總結(jié)

以上是生活随笔為你收集整理的进程之间通信 共享内存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。