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

📄 testqueue.c

📁 用c/c++实现的一个CMPP API
💻 C
字号:
#include "queue.h"#include <string.h>#include <strings.h>#include <unistd.h>#define ErrQuit printf#define MacShmKey 0x3e9#define MacShmSize 40void usage(){    printf("testqueue utility\n");    printf("\nusage: testqueue <r[role]>  <t[times]> <s[size]> \n");                       printf("   -Options:\n");    printf("    r[role]          utility role\n");    printf("     'r'-read 'w'-write 'l' -list \n");    printf("    s[size]   size \n");    printf("    t[times]    Times to operate memory\n");    printf("    p   if p  the package will be printed \n");} #define MacReadRole 0#define MacWriteRole    1#define MacLookRole 2void    vReadFunc( void* pvQueue, int nIter, int nSize, int nPOpt );void    vWriteFunc( void* pvQueue, int nIter, int nSize, int nPOpt );void    vLookFunc( void* pvQueue, int nIter, int nSize, int nPOpt );void*   g_pAddr;int     g_nShmId;int main( int argc, char* argv[] ){    int i;    int nRole; /*角色*/    int nIter; /*重复次数*/    int nPOpt; /*打印选项*/    int nSize; /*长度*/    int nRet;        if (argc < 2)     {        usage();        exit(1);    }    for(i=1; i<argc; i++){        if(!strncmp(argv[i], "rr", 2))            nRole = MacReadRole;        if(!strncmp(argv[i], "rw", 2))            nRole = MacWriteRole;        if(!strncmp(argv[i], "rl", 2))            nRole = MacLookRole;                    if(!strncmp(argv[i], "s", 1)){                  const char* const parm = &argv[i][1];            nSize = atoi(parm);        }               if(!strncmp(argv[i], "t", 1)){            const char* const parm = &argv[i][1];            nIter = atoi(parm);        }                if(!strncmp(argv[i], "p", 1)){            nPOpt = 1;        }    }        g_pAddr = pvInitAQueue_Api( MacShmKey, MacShmSize, 40, &g_nShmId );        switch( nRole )    {        case MacReadRole :            vReadFunc( g_pAddr, nIter, nSize, nPOpt );        break;        case MacWriteRole :            for( i=0; i<nIter; ++i )             {                vWriteFunc( g_pAddr, 1, nSize, nPOpt );                vReadFunc(  g_pAddr, 1, nSize, nPOpt );                nSize++;            }            vWriteFunc( g_pAddr, 1, nSize, nPOpt );            vDumpQueue_Api( stdout, g_pAddr  );            nRet = nResetQueue_Api( g_pAddr );            printf( "nRet = %d, after nReset \n", nRet );            vDumpQueue_Api( stdout, g_pAddr  );                    break;        case MacLookRole :            vLookFunc( g_pAddr, nIter, nSize, nPOpt );        break;                default:            printf("invalid role \n");        break;    }        return 0;}void    vReadFunc( void* pvQueue, int nIter, int nSize, int nPOpt ){    int i;    int     nRet;    void*   pAddr;    char*   pMem;    char*   pMemp;    int j;//  int     nShmID;            pAddr = pvQueue;    /*pvInitAQueue( MacShmKey, MacShmSize, 1, &nShmID );*/            if ( nRet < 0 )    {        DPrintf("Error When nInitMore\n" );    }    pMem = (char*) malloc( nSize );    if ( pMem == NULL )    {        ErrQuit( "Error in malloc  Quit \n" );    }        for( i=0; i<nIter; i++ )    {        memset( pMem, 0, nSize );        pMemp = pMem;        nRet = nReadQueue_Api( pAddr , pMem, nSize );        if ( nRet <= 0 )        {            DPrintf("nRet = %d after nReadQueue ", nRet);            return ;        }        if ( nPOpt == 1 )        {            vDumpQueue_Api( NULL, pAddr );        }            for( j=0; j<nRet; j++ )        {            if ( j%16 == 0 )            printf("\n\t");                    printf("[%2d]", (unsigned char)*pMemp );            pMemp++;                }        printf("\n");    }    free( pMem );                }void    vWriteFunc( void* pvQueue, int nIter, int nSize, int nPOpt ){    int i;    int     nRet;    void*   pAddr;    char*   pMem;    char*   pMemp;//  int nShmId;        pAddr = pvQueue;    //pAddr = pvInitAQueue( MacShmKey, MacShmSize, 1, &nShmId );            pMem = (char*) malloc( nSize );    if ( pMem == NULL )    {        ErrQuit( "Error in malloc  Quit \n" );    }        pMemp = pMem;    for( i=0; i<nSize; i++ )    {        *pMemp = (char)i;        pMemp++;    }    for( i=0; i<nIter; i++ )    {        nRet = nWriteQueue_Api( pAddr, pMem, nSize );                if ( nRet != 0 )        {                    }        if ( nPOpt == 1 )        {            vDumpQueue_Api( NULL, pAddr );        }        DPrintf("nRet = %d after nWriteQueue ", nRet);    }    free( pMem );        return ;    }void    vLookFunc( void* pvQueue, int nIter, int nSize, int nPOpt ){            void*   pAddr;//  int nShmId;        pAddr = pvQueue;    //pAddr = pvInitAQueue( MacShmKey, MacShmSize, 1, &nShmId );        while( 1 )    {                vDumpQueue_Api( NULL, pAddr );        sleep(1);        break;    }    }    

⌨️ 快捷键说明

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