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

📄 sharememory.cpp

📁 Mysql的处理
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                          + (m_pBlockInfo->pAreaInfo + i)->ulItemNumber * sizeof(unsigned long) \                          + k * (1 + (m_pBlockInfo->pAreaInfo + i)->ulItemNumber) * sizeof(unsigned long) );                       // initialize start address of update array                    ((m_pBlockInfo->pAreaInfo + i)->pUpdateArrayInfo + k)->pUpdateArray = \                          ((m_pBlockInfo->pAreaInfo + i)->pUpdateArrayInfo + k)->pCounter + 1;                                             	                }  */                          }                                      			#ifndef DEBUG_SHM           			            pTemp = NULL;			#endif            			#ifdef DEBUG_SHM			{      				if( (fp = fopen(gsLogFileName,"a+") ) == NULL)				{				  printf("open %s failed!\n",gsLogFileName);				  exit(-1);					}				fprintf(fp,"<Read Initialize Information>\n");				fprintf(fp,"Share Memory Initialize Flag:%d\n",m_pBlockInfo->ucInitializeFlag);				fprintf(fp,"Share Memory Key:%ld\n",m_pBlockInfo->ulShmKey);				fprintf(fp,"Share Memory Size:%ld\n",m_pBlockInfo->ulShmTotalSize);				fprintf(fp,"Semaphore Number:%d\n",m_pBlockInfo->uiSemTotalNumber);				fprintf(fp,"Control Area Size:%ld\n",m_pBlockInfo->ulControlAreaSize);   				fprintf(fp,"Business Area Number:%d\n",m_pBlockInfo->uiBusinessAreaNumber); 				      				// output of business area information				for(int i=0;i < m_pBlockInfo->uiBusinessAreaNumber;i++)				{			      	fprintf(fp,"\n<Business Area %d Information>\n",i);			      	      			      	// output of area information			      	fprintf(fp,"<Area Information>\n");			      	fprintf(fp,"Area ID:%d\n",(m_pBlockInfo->pAreaInfo + i)->uiAreaID);			      	fprintf(fp,"Area Size:%ld\n",(m_pBlockInfo->pAreaInfo + i)->ulAreaSize);			      	fprintf(fp,"Area Index Size:%ld\n",(m_pBlockInfo->pAreaInfo + i)->ulAreaIndexSize);   			      	fprintf(fp,"Data Item Size:%ld\n",(m_pBlockInfo->pAreaInfo + i)->ulItemSize);			      	fprintf(fp,"Data Item Number:%ld\n",(m_pBlockInfo->pAreaInfo + i)->ulItemNumber);			      	fprintf(fp,"Queue Number:%d\n",(m_pBlockInfo->pAreaInfo + i)->uiQueueNumber);					/*fprintf(fp,"Update Array Number:%d\n",(m_pBlockInfo->pAreaInfo + i)->uiUpdateArrayNumber);*/			            			      	// output of queue information			      	for(int j=0;j < (m_pBlockInfo->pAreaInfo + i)->uiQueueNumber;j++)			      	{			      	    fprintf(fp,"<Queue %d Information>\n",j);			      	    fprintf(fp,"Queue ID:%d\n",((m_pBlockInfo->pAreaInfo + i)->pQueueInfo + j)->uiQueueID);			      	    fprintf(fp,"Front Concurrent:%d\n",((m_pBlockInfo->pAreaInfo + i)->pQueueInfo + j)->ucFrontConcurrent);			      	    fprintf(fp,"Front Semaphore:%d\n",((m_pBlockInfo->pAreaInfo + i)->pQueueInfo + j)->uiFrontSemNumber);			      	    fprintf(fp,"Rear Concurrent:%d\n",((m_pBlockInfo->pAreaInfo + i)->pQueueInfo + j)->ucRearConcurrent);			      	    fprintf(fp,"Rear Semaphore:%d\n",((m_pBlockInfo->pAreaInfo + i)->pQueueInfo + j)->uiRearSemNumber);			      	    fprintf(fp,"Front:%ld\n",*( ((m_pBlockInfo->pAreaInfo + i)->pQueueInfo + j)->pQueue->pFront ) );			      	    fprintf(fp,"Rear:%ld\n",*( ((m_pBlockInfo->pAreaInfo + i)->pQueueInfo + j)->pQueue->pRear ) );			      	    fprintf(fp,"MaxSize:%ld\n",((m_pBlockInfo->pAreaInfo + i)->pQueueInfo + j)->pQueue->ulMaxSize);			      	    fprintf(fp,"Queue Address:0x%0x\n",((m_pBlockInfo->pAreaInfo + i)->pQueueInfo + j)->pQueue->pQueue);  			      	}			            					/*      // output of update array information			      	if((m_pBlockInfo->pAreaInfo + i)->uiUpdateArrayNumber > 0)			      	    fprintf(fp,"<Update Array Information>\n");			      	for(int j=0;j < (m_pBlockInfo->pAreaInfo + i)->uiUpdateArrayNumber;j++)			      	{			          	fprintf(fp,"Update Array %d\n",j);			          	      			          	fprintf(fp,"Update Array ID:%d \n",((m_pBlockInfo->pAreaInfo + i)->pUpdateArrayInfo + j)->uiUpdateArrayID);			          	fprintf(fp,"Counter:%ld\n",*( ((m_pBlockInfo->pAreaInfo + i)->pUpdateArrayInfo + j)->pCounter ) );			          	fprintf(fp,"Update Array Address:0x%0x\n",((m_pBlockInfo->pAreaInfo + i)->pUpdateArrayInfo + j)->pUpdateArray);            				      	}*/			  	} 			  	fclose(fp);			}			#endif            }	    }	/*    // initialize business area config information of this program    void C_ShareMemory::GetProgramConfig()    {        CConfigXml ShmConfig;        char sName[XML_NAME_LEN];        char sValue[XML_VALUE_LEN];        string sTemp;        		ShmLog("GetProgramConfig");        if( !ShmConfig.Load(m_pConfigFileName) )		{ShmLog("34");throw C_SHMException(); }                   // get config value of read area number        memset(sValue,0,XML_VALUE_LEN);        memset(sName,0,XML_NAME_LEN);        sprintf(sName,"ShareMemory.Program_%d.ReadAreaNumber",m_uiProgramFlag);		ShmLog(sName);        if( !ShmConfig.GetValue(sName,sTemp) )		{ShmLog("35");throw C_SHMException();}        strcpy(sValue,sTemp.c_str());        m_uiReadAreaNumber = atoi(sValue);                if(m_uiReadAreaNumber > 0)        {            // get config information of business area for this program to read            m_pReadAreaInfo = (S_AreaInfo *) new \              char[ m_uiReadAreaNumber * sizeof(S_AreaInfo) ];            if(NULL == m_pReadAreaInfo)            {				{ShmLog("36");throw C_SHMException();}	            }            memset(m_pReadAreaInfo,0, \                     m_uiReadAreaNumber * sizeof(S_AreaInfo));            for(int i=0;i < m_uiReadAreaNumber;i++)            {                // get config value of business area ID                //   for this program to read                memset(sValue,0,XML_VALUE_LEN);                memset(sName,0,XML_NAME_LEN);                sprintf(sName,"ShareMemory.Program_%d.ReadAreaID_%d", \                          m_uiProgramFlag,i);                if( !ShmConfig.GetValue(sName,sTemp) )					{ShmLog("37");throw C_SHMException();}                strcpy(sValue,sTemp.c_str());                (m_pReadAreaInfo + i)->uiAreaID = atoi(sValue);                               // get business area config information from m_pBlockInfo                //     by area ID                for(int j=0;j < m_pBlockInfo->uiBusinessAreaNumber;j++)                {                    if(                            (m_pBlockInfo->pAreaInfo + j)->uiAreaID                        ==                           (m_pReadAreaInfo + i)->uiAreaID                      )                        memcpy((m_pReadAreaInfo + i), \                               (m_pBlockInfo->pAreaInfo + j), \                               sizeof(S_AreaInfo));   	                }                  	            }                    }        else        {            m_uiReadAreaNumber = 0;            m_pReadAreaInfo = NULL;        }        // get config value of write area number        memset(sValue,0,XML_VALUE_LEN);        memset(sName,0,XML_NAME_LEN);        sprintf(sName,"ShareMemory.Program_%d.WriteAreaNumber",m_uiProgramFlag);        if( !ShmConfig.GetValue(sName,sTemp) )			{ShmLog("38");throw C_SHMException();}        strcpy(sValue,sTemp.c_str());        m_uiWriteAreaNumber = atoi(sValue);                if(m_uiWriteAreaNumber > 0)        {            // get config information of business area for this program to read            m_pWriteAreaInfo = (S_AreaInfo *) new \              char[ m_uiWriteAreaNumber * sizeof(S_AreaInfo) ];            if(NULL == m_pWriteAreaInfo)            {				{ShmLog("39");throw C_SHMException();}	            }            memset(m_pWriteAreaInfo,0, \                     m_uiWriteAreaNumber * sizeof(S_AreaInfo));            for(int i=0;i < m_uiWriteAreaNumber;i++)            {                // get config value of business area ID                //   for this program to write                memset(sValue,0,XML_VALUE_LEN);                memset(sName,0,XML_NAME_LEN);                sprintf(sName,"ShareMemory.Program_%d.WriteAreaID_%d", \                          m_uiProgramFlag,i);                if( !ShmConfig.GetValue(sName,sTemp) )				{ShmLog("40");throw C_SHMException();}                strcpy(sValue,sTemp.c_str());                (m_pWriteAreaInfo + i)->uiAreaID = atoi(sValue);                 // get business area config information from m_pBlockInfo                //     by area ID                                for(int j=0;j < m_pBlockInfo->uiBusinessAreaNumber;j++)                {                    if(                            (m_pBlockInfo->pAreaInfo + j)->uiAreaID                        ==                           (m_pWriteAreaInfo + i)->uiAreaID                      )                        memcpy((m_pWriteAreaInfo + i), \                               (m_pBlockInfo->pAreaInfo + j), \                               sizeof(S_AreaInfo));   	                }                     	            }                    }        else        {            m_uiWriteAreaNumber = 0;            m_pWriteAreaInfo = NULL;        }                	    } */    // initialize config information of the specified business area    void C_ShareMemory::GetOperateAreaConfig()    {        m_pOperateAreaInfo = (S_AreaInfo *) new char[ sizeof(S_AreaInfo) ];        if(NULL == m_pOperateAreaInfo)        {			{				ShmLog("40_");				throw C_SHMException();			}        	        }        int i=0;        for(i;i < m_pBlockInfo->uiBusinessAreaNumber;i++)        {            if(m_uiOperateAreaFlag == (m_pBlockInfo->pAreaInfo + i)->uiAreaID)            {                memcpy(m_pOperateAreaInfo,(m_pBlockInfo->pAreaInfo + i),sizeof(S_AreaInfo));                break;            }        }        // verify business area flag        if(i == m_pBlockInfo->uiBusinessAreaNumber)        {			{				ShmLog("operate area flag is not config!");				throw C_SHMException();			}             	        }            	    }    	/*    // operate semaphore, operation flag = 1 is lock, otherwise -1 is unlock    void C_ShareMemory::OperateSem(const unsigned int uiSemNumber,const char cFlag)    {        struct sembuf suSemBuffer;                                        if(1 == cFlag)        {            memset(&suSemBuffer,0,sizeof(sembuf));            suSemBuffer.sem_num =  uiSemNumber;            suSemBuffer.sem_op = 0;            suSemBuffer.sem_flg = SEM_UNDO;                                     semop(m_iSemID,&suSemBuffer,1);			#ifdef DEBUG_SHM			{      			  if( (fp = fopen(gsLogFileName,"a+") ) == NULL)			  {			    printf("open %s failed!\n",gsLogFileName);			    exit(-1);				  }			  fprintf(fp,"semnum [%d] op [%d] \n",uiSemNumber,0);			  fclose(fp);			}			#endif        }                memset(&suSemBuffer,0,sizeof(sembuf));        suSemBuffer.sem_num =  uiSemNumber;        suSemBuffer.sem_op = cFlag;        suSemBuffer.sem_flg = SEM_UNDO;                         semop(m_iSemID,&suSemBuffer,1);	        		#ifdef DEBUG_SHM		{      		  if( (fp = fopen(gsLogFileName,"a+") ) == NULL)		  {		    printf("open %s failed!\n",gsLogFileName);		    exit(-1);			  }		  fprintf(fp,"semnum [%d] op [%d] \n",uiSemNumber,cFlag);		  fclose(fp);		}		#endif        	    } }    	*/    /* private function for the C_ShareMemory class  ====end====================*/  /* public service interface for the C_ShareMemory class ====start===========*/          // constructor,load share memory block     //   and initialize share memory config information    C_ShareMemory::C_ShareMemory(const char *pConfigFileName, \                     const unsigned int uiProgramFlag,const unsigned int uiOperateAreaFlag)    // process exception     try    {    	// function C_ShareMemory()	        // initial flag        unsigned char ucInitialFlag = 0;        // get config file name        if(NULL == pConfigFileName)		{			ShmLog("1");			throw C_SHMException();		}                    m_pConfigFileName = new char[strlen(pConfigFileName) + 1];        if(NULL == m_pConfigFileName)		{			ShmLog("2");			throw C_SHMException();		}        memset(m_pConfigFileName,0,strlen(pConfigFileName) + 1);                strcpy(m_pConfigFileName,pConfigFileName);        // get this program flag        m_uiProgramFlag = uiProgramFlag;        m_uiOperateAreaFlag = uiOperateAreaFlag;                       // get log file name        GetLogFileName(uiProgramFlag);                // get ShareMemoryID and SemaphoreSetID,         //   if not exist, creat it and set iInitFlag = 1        GetShmSemID(ucInitialFlag);                 // load share memory block        m_pBlockStartAddress = (char *) shmat(m_iShmID,0,0);        if( (char *)-1 == m_pBlockStartAddress )		{			ShmLog("3");			throw C_SHMException();		}             		#ifdef DEBUG_SHM  		  if( (fp = fopen(gsLogFileName,"a+") ) == NULL)		  {

⌨️ 快捷键说明

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