apr共享内存

news/2024/11/24 17:59:32/

下载:

Download - The Apache Portable Runtime Project

编译:

使用cmake-gui生成库:
apr-1.lib
aprapp-1.lib
libapr-1.lib
libaprapp-1.lib
libapr-1.dll
在Developer PowerShell for VS 2019中:
执行nmake -f Makefile.win来编译APR。
nmake -f Makefile.win install PREFIX=C:\your\installation\path
最后生成头文件

code:

创建、写数据、读数据

int main() {//内存池,管理所有的共享内存(共享内存区域在这个池子里)apr_pool_t* pool;//apr_status_t 是一个枚举类型,用于表示 APR 函数的返回状态。//通过检查 apr_status_t 的值,可以判断函数调用是否成功以及具体的错误原因。apr_status_t status;// 初始化APR库//apr_initialize() 函数用于初始化 APR 库。在调用任何其他 APR 函数之前,必须先调用这个函数。apr_initialize();//atexit(apr_terminate) 函数用于注册一个在程序正常终止时调用的函数//在这个例子中,apr_terminate 函数会在程序退出时被调用,以确保 APR 资源被正确清理。//apr_terminate 函数负责释放 APR 在初始化时分配的所有资源,包括内存、文件句柄等。//即使程序在某些地方抛出异常,atexit 注册的函数也会在程序退出时被调用,确保资源被正确释放atexit(apr_terminate);// 创建内存池status = apr_pool_create(&pool, NULL);if (status != APR_SUCCESS) {fprintf(stderr, "Failed to create pool\n");return -1;}// 创建共享内存段// apr_shm_t 类型用于表示共享内存段,而 apr_shm_create 函数用于创建共享内存段。//apr_shm_t 是 APR 中用于表示共享内存段的数据结构。//这个指针将指向新创建的共享内存段。通过这个指针,//你可以对共享内存段进行各种操作,如读取、写入和销毁。apr_shm_t* shm;//通常是一个简短的字符串,用于唯一标识共享内存段。例如 "my_shared_memory"。不是路径const char* shm_name = "my_shared_memory";//用于指定共享内存段的大小,1024个字节apr_size_t shm_size = 1024;//创建一个共享内存段,并将其相关信息存储在一个 apr_shm_t 结构体中status = apr_shm_create(&shm, shm_size, shm_name, pool);if (status != APR_SUCCESS) {fprintf(stderr, "Failed to create shared memory\n");return -1;}// 获取共享内存的地址char* shm_addr = (char*)apr_shm_baseaddr_get(shm);// 写入数据strcpy(shm_addr, "Hello, APR!");// 读取数据printf("Shared memory content: %s\n", shm_addr);// 销毁共享内存段status = apr_shm_destroy(shm);if (status != APR_SUCCESS) {fprintf(stderr, "Failed to destroy shared memory\n");return -1;}// 清理内存池apr_pool_destroy(pool);
}

进程1:写数据

demo.cpp

#include <iostream>
#include <Windows.h>
#include <stdio.h>
#include <string.h>
#include <apr_general.h>
#include <apr_pools.h>
#include <apr_shm.h>
using namespace std;int main() {cout << "****************************" << endl;cout << "apr_demo_process" << endl;cout << "xie_ru: " << "Hello, APR!" << endl;cout << "****************************" << endl;//内存池,管理所有的共享内存(所有的共享内存区域都在这个池子里)apr_pool_t* pool;//apr_status_t 是一个枚举类型,用于表示 APR 函数的返回状态。//通过检查 apr_status_t 的值,可以判断函数调用是否成功以及具体的错误原因。apr_status_t status;// 初始化APR库//apr_initialize() 函数用于初始化 APR 库。在调用任何其他 APR 函数之前,必须先调用这个函数。apr_initialize();//atexit(apr_terminate) 函数用于注册一个在程序正常终止时调用的函数//在这个例子中,apr_terminate 函数会在程序退出时被调用,以确保 APR 资源被正确清理。//apr_terminate 函数负责释放 APR 在初始化时分配的所有资源,包括内存、文件句柄等。//即使程序在某些地方抛出异常,atexit 注册的函数也会在程序退出时被调用,确保资源被正确释放atexit(apr_terminate);// 创建内存池status = apr_pool_create(&pool, NULL);if (status != APR_SUCCESS) {fprintf(stderr, "Failed to create pool\n");return -1;}// 创建共享内存段// apr_shm_t 类型用于表示共享内存段,而 apr_shm_create 函数用于创建共享内存段。//apr_shm_t 是 APR 中用于表示共享内存段的数据结构。//这个指针将指向新创建的共享内存段。通过这个指针,//你可以对共享内存段进行各种操作,如读取、写入和销毁。apr_shm_t* shm;//通常是一个简短的字符串,用于唯一标识共享内存段。例如 "my_shared_memory"。不是路径const char* shm_name = "my_shared_memory";//用于指定共享内存段的大小,1024个字节apr_size_t shm_size = 1024;//创建一个共享内存段,并将其相关信息存储在一个 apr_shm_t 结构体中status = apr_shm_create(&shm, shm_size, shm_name, pool);if (status != APR_SUCCESS) {fprintf(stderr, "Failed to create shared memory\n");return -1;}// 获取共享内存的地址char* shm_addr = (char*)apr_shm_baseaddr_get(shm);// 写入数据strcpy(shm_addr, "Hello, APR!");// 读取数据//printf("Shared memory content: %s\n", shm_addr);//阻塞,防止进程退出while (1){Sleep(1000 * 30);break;}// 销毁共享内存段status = apr_shm_destroy(shm);if (status != APR_SUCCESS) {fprintf(stderr, "Failed to destroy shared memory\n");return -1;}// 清理内存池apr_pool_destroy(pool);
}

进程2:读取数据

process_two.cpp

#include <iostream>
#include <Windows.h>
#include <stdio.h>
#include <string.h>
#include <apr_general.h>
#include <apr_pools.h>
#include <apr_shm.h>
using namespace std;int main() {cout << "****************************" << endl;cout << "apr_process_two_process" << endl;cout << "shu_chu: " << "Hello, APR!" << endl;cout << "****************************" << endl;apr_pool_t* pool;apr_status_t status;apr_shm_t* shm;const char* shm_name = "my_shared_memory";// 初始化APR库status = apr_initialize();if (status != APR_SUCCESS) {fprintf(stderr, "Failed to initialize APR\n");return -1;}// 注册终止函数if (atexit(apr_terminate) != 0) {fprintf(stderr, "Failed to register apr_terminate\n");return -1;}// 创建内存池status = apr_pool_create(&pool, NULL);if (status != APR_SUCCESS) {fprintf(stderr, "Failed to create pool\n");return -1;}// 获取已存在的共享内存段status = apr_shm_attach(&shm, shm_name, pool);if (status != APR_SUCCESS) {fprintf(stderr, "Failed to attach to shared memory: %d\n", status);return -1;}// 获取共享内存的基地址char* shm_addr = (char*)apr_shm_baseaddr_get(shm);// 读取数据printf("Shared memory content: %s\n", shm_addr);// 销毁共享内存段(注意:通常由创建者销毁)status = apr_shm_destroy(shm);if (status != APR_SUCCESS) {fprintf(stderr, "Failed to destroy shared memory: %d\n", status);return -1;}// 清理内存池apr_pool_destroy(pool);return 0;
}

补充:

把libapr-1.dll拷贝到可执行文件下


http://www.ppmy.cn/news/1549601.html

相关文章

什么是“数学活动”?

数学活动嘛&#xff0c;不就是关于数学的活动&#xff0c;还有什么可说的&#xff1f;非也&#xff0c;且看下面定义。 一、不同人的定义&#xff1a; ① “数学活动”是指在数学教学过程中&#xff0c;以学生学习兴趣和内在需要为基础&#xff0c;以主动探索、变革、改造对象…

win10局域网加密共享设置

1、创建共享账户 我的电脑右键选择管理 选择本地用户和组 -> 用户 双击用户 在空白区域右键,新建用户 然后创建用户 点击创建后 2、设置网络 右下角网络右键

C++结构型设计模式的作用和特征

在C面向对象软件设计中&#xff0c;结构型模式&#xff08;Structural Patterns&#xff09;主要关注对象和类之间的组合&#xff0c;以形成更大的结构。这些模式帮助我们管理和组织对象之间的关系&#xff0c;使得系统更加灵活、可扩展和易于维护。以下是几种常见的结构型模式…

解决mfc100u.dll缺失问题,轻松恢复系统稳定

mfc100u.dll 是一个动态链接库&#xff08;DLL&#xff09;文件&#xff0c;属于 Microsoft Foundation Classes (MFC) 库的一部分。MFC 是微软公司开发的一套用于快速开发 Windows 应用程序的 C 类库。mfc100u.dll 文件包含了 MFC 库中一些常用的函数和类的定义&#xff0c;这…

【安卓脚本】Android工程中文硬编码抽取

【安卓脚本】Android工程中文硬编码抽取 Android 原生工程 中文硬编码抽取功能支持流程示意项目地址 Android 原生工程 中文硬编码抽取 安卓在进行国际化多语言功能时经常会遇到一个头疼的问题&#xff0c;就是在以往的项目中往往存在大量的中文硬编码&#xff0c;这块人工处理…

MySQL数据库运维及集群搭建

一、MySQL运维操作 1、运维管理 用户管理&#xff1a;创建、删除、授权 密码管理&#xff1a;设置、修改、忘记 数据管理&#xff1a;备份与恢复 2、用户管理 用户管理&#xff1a;创建&#xff08;create&#xff09;、删除&#xff08;drop&#xff09;、授权&#xff0…

RHCD-----shell

要求&#xff1a; 通过shell脚本分析部署nginx网络服务 1.接收用户部署的服务名称 2.判断服务是否安装 ​ 已安装&#xff1b;自定义网站配置路径为/www&#xff1b;并创建共享目录和网页文件&#xff1b;重启服务 ​ 没有安装&#xff1b;安装对应的软件包 3.测试 判断服务是…

WPF动画

在 WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;主要有两种类型的动画&#xff1a;属性动画&#xff08;Property Animation&#xff09;和关键帧动画&#xff08;Key - Frame Animation&#xff09;。属性动画用于简单地从一个起始值平滑地过渡…