当前位置: 首页> 娱乐> 影视 > 移动端网站_我要软文网_百度搜索竞价推广_怎样做网站平台

移动端网站_我要软文网_百度搜索竞价推广_怎样做网站平台

时间:2025/8/10 16:25:33来源:https://blog.csdn.net/qq_62687476/article/details/144001307 浏览次数:0次
移动端网站_我要软文网_百度搜索竞价推广_怎样做网站平台

下载:

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拷贝到可执行文件下

关键字:移动端网站_我要软文网_百度搜索竞价推广_怎样做网站平台

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: