进程之间通信 共享内存
生活随笔
收集整理的這篇文章主要介紹了
进程之间通信 共享内存
小編覺得挺不錯(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)存
?
?代碼
- 服務(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 沈阳站在和平区吗
- 下一篇: java 交换两个数的值(临时变量,加减