进程之间通信 共享内存
生活随笔
收集整理的這篇文章主要介紹了
进程之间通信 共享内存
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
命令?
- ?ipcs 命令查看共享內存、消息隊列、管道等相關信息
- ipcs -m 查看共享內存的信息
代碼
- 創建共享內存
- 共享內存 關聯 進程
- 分離共享內存
- 刪除共享內存
?
?代碼
- 服務器產生數據,客戶端輸出數據,服務器和客戶端使用相同的共享內存
服務器
#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{};//創建共享內存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);}//共享內存 關聯 邏輯指針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);} // //分離共享內存 // if((shmdt(share_add))<0){ // perror("shmdt error!"); // exit(1); // } // //刪除共享內存 // 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{};//創建共享內存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);}//共享內存 關聯 邏輯指針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);} // //分離共享內存 // if((shmdt(share_add))<0){ // perror("shmdt error!"); // exit(1); // } // //刪除共享內存 // if ((shmctl(share_id,IPC_RMID,0))<0){ // perror("shmctl error!"); // exit(1); // }else{ // printf("release shared-memory!\n"); // system("ipcs -m"); // }return 0; }?參考鏈接
- 共享內存函數(shmget、shmat、shmdt、shmctl)及其范例
總結
以上是生活随笔為你收集整理的进程之间通信 共享内存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 沈阳站在和平区吗
- 下一篇: java 交换两个数的值(临时变量,加减