⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 extend.c

📁 PB 熟悉的哥们希望大家可以互相学习一下
💻 C
字号:
/***************************************************************
 *                                                             *
 * Copyright (c) 2001-2007 McObject LLC. All Right Reserved.   *
 *                                                             *
 ***************************************************************/

/*
 * This sample demonstarates database extention API -
 * mco_db_extend()
 */
#include "platform.h"
#include <stdio.h>
#include <stdlib.h>
#include "samples.h"

static const char* dbname = "SimpleDb";
static const int FIRST_SEGSZ = 1024 * 2000UL;
static const int SECOND_SEGSZ = 1024 * 6000UL;
#ifndef MCO_PLATFORM_X64
    static const int PAGESIZE = 96;
#else 
    static const int PAGESIZE = 192;
#endif 

void _SH_(void)
{

    char text[] = 
    {
        "\nThis example demonstrates eXtremeDB memory extension API\n"
            "\nCopyright (c) 2001-2007 McObject LLC. All Right Reserved.\n\n"
    };

    printf("%s\nPress Enter to start", text);

}


/* Produces database memory report
 */
void showMem(mco_db_h db)
{
    mco_puint freepg, totalpg;

    mco_db_free_pages(db, &freepg);
    mco_db_total_pages(db, &totalpg);

    printf("\n\tMemory Report:\n\ttotal pages=%d (%dK)\n\tfree pages=%d (%dK)\n\tused %dK\n", totalpg, totalpg*
           PAGESIZE / 1024, freepg, freepg* PAGESIZE / 1024, (totalpg - freepg)* PAGESIZE / 1024);
}


/* fatal error handler */
static void errhandler(int n)
{
    printf("\neXtremeDB fatal error: %d", n);
    getchar();
    exit( - 1);
}


int main(void)
{
    MCO_RET rc;
    mco_db_h db = 0;
    char* start_mem1 = 0;
    char* start_mem2 = 0;
    mco_runtime_info_t info;

    _SH_();
    mco_get_runtime_info(&info);
    if (info.mco_shm_supported)
    {
        printf("\nDatabase extention API is not available for the shared memory database runtime\n");
        exit(1);
    };

    start_mem1 = malloc(FIRST_SEGSZ);

    /* set fatal error handler */
    mco_error_set_handler(&errhandler);

    mco_runtime_start();
    printf("\nAllocating initial memory pool of %dK for the database at the 0x%x\n", FIRST_SEGSZ / 1024, start_mem1);

    /* Create a database, using first memory segment */
    rc = mco_db_open(dbname, simple_get_dictionary(), start_mem1, FIRST_SEGSZ, (uint2)PAGESIZE);

    if (rc)
    {
        printf("\nerror creating database %d", rc);
        mco_runtime_stop();
        exit(1);
    }

    /* connect to the database, obtain a database handle */
    mco_db_connect(dbname, &db);

    showMem(db);

    /* allocate the second database segment and "extend" the database */
    start_mem2 = (SECOND_SEGSZ > 0) ? malloc(SECOND_SEGSZ): 0;

    printf("\nExtending the database memory pool by %dK at the 0x%x\n", SECOND_SEGSZ / 1024, start_mem2);

    if (start_mem2)
    {
        mco_db_extend(dbname, start_mem2, SECOND_SEGSZ);
    }

    showMem(db);

    /* disconnect from the database, db is no longer valid */
    mco_db_disconnect(db);

    /* destroys the memory manager */
    mco_db_close(dbname);

    mco_runtime_stop();
    if (start_mem1)
    {
        free(start_mem1);
    }
    if (start_mem2)
    {
        free(start_mem2);
    }

    printf("\nPress Enter to finish\n");
    getchar();
    PROG_EXIT(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -