System V 中内存共享的简单实例

来源:互联网 发布:淘宝直通车如何操作 编辑:程序博客网 时间:2024/06/05 19:58
//read.cpp#include <sys/shm.h>#include <unistd.h>#include <iostream>#define PATH "/tmp/unixdomain"using namespace std;struct share_mem {int rw_flag;char data[20];};int main(int argc, const char* argv[]) {key_t k = ftok(PATH, 1);if(-1 == k) {std::cout << "create key fail" << std::endl;exit(-1);}std::cout << "key : " << k << std::endl;int shm_id = shmget(k, sizeof(share_mem), IPC_CREAT|0640);if(-1 == shm_id) {std::cout << "create shm fail" << std::endl;exit(-1);}std::cout << "create shm success" << std::endl;share_mem* pBuf = (share_mem*)shmat(shm_id, NULL, 0);if(-1 == (int)pBuf) {std::cout << "map shm fail" << std::endl;exit(-1);}std::cout << "map shm success" << std::endl;pBuf->rw_flag = 0;while(1) {if(1 == pBuf->rw_flag)break;elsesleep(1);}std::cout << "read:" << pBuf->data << std::endl;if(-1 == shmdt(pBuf)) {std::cout << "delete shm fail" << std::endl;exit(-1);}std::cout << "delete shm success" << std::endl;shmctl(shm_id, IPC_RMID, NULL);return 0;}
//write.cpp#include <sys/shm.h>#include <unistd.h>#include <iostream>#define PATH "/tmp/unixdomain"using namespace std;struct share_mem {int rw_flag;char data[20];};int main(int argc, const char* argv[]) {key_t k = ftok(PATH, 1);if(-1 == k) {std::cout << "create key fail" << std::endl;exit(-1);}std::cout << "key : " << k << std::endl;int shm_id = 0;while(1) {shm_id = shmget(k, sizeof(share_mem), 0640);if(-1 == shm_id) sleep(1);elsebreak; }std::cout << "get shm success" << std::endl;share_mem* pBuf = (share_mem*)shmat(shm_id, NULL, 0);if(-1 == (int)pBuf) {std::cout << "map shm fail" << std::endl;exit(-1);}std::cout << "map shm success" << std::endl;strcpy(pBuf->data, "this is shm test");std::cout << "write:" << pBuf->data << std::endl;pBuf->rw_flag = 1;if(-1 == shmdt(pBuf)) {std::cout << "delete shm fail" << std::endl;exit(-1);}std::cout << "delete shm success" << std::endl;return 0;}
0 0
原创粉丝点击