📄 mainserv.c
字号:
loadedMesg.countOfMesg = loadArg.mesgCount; } else //AutoRollBack the supposed numbers of records { loadedMesg.locInfo = (LOCINFO *)malloc( LEN_LOCINFO * AUTOROLLVAL_DW); fp = Fopen( "DWXX.data","r+"); fseek( fp, ( loadArg.mesgCount-AUTOROLLVAL_DW )*LEN_DWXX, SEEK_SET ); for( i=0; i<AUTOROLLVAL_DW; i++) /******Problem here,can't use the wrapper function Fread()*******/
if( fread( &( (loadedMesg.locInfo)[i].dwxx), LEN_DWXX, 1, fp) != 1)
{
if( feof(fp))
{
Fclose(fp);
break;
}
perror("File read error!");
} else { (loadedMesg.locInfo)[i].index = i+1; printf("Index is %d.\n",(loadedMesg.locInfo)[i].index); printf("File content:Hour %d Min %d SRCID %lX\n",loadedMesg.locInfo[i].dwxx.hour,loadedMesg.locInfo[i].dwxx.minute,loadedMesg.locInfo[i].dwxx.srcID ); printf(" Address of the message %d is %lX.\n",i,&loadedMesg.locInfo[i] ); } Fclose( fp ); /* Alloacate the memory of address array for message */
p= loadedMesg.pLocInfo = malloc( LEN_P_LOCINFO * AUTOROLLVAL_DW ); printf(" Address of the address array head is %lX.\n",loadedMesg.pLocInfo ); for( i=0; i<AUTOROLLVAL_DW; i++) { *p = &loadedMesg.locInfo[i]; printf(" Address of the message pointer %d is %lX.\n",i,*p ); p++; } loadedMesg.countOfMesg = AUTOROLLVAL_DW; /* Rewrite the records to file to keep the latest AUTOROLLVAL_DW numbers of records */ SaveData( INBOX, TYPE_OF_DWXX, AUTOROLLVAL_DW ); countTXINDEX = AUTOROLLVAL_DW; } Pthread_mutex_unlock( &countTXINDEX_Mutex ); Pthread_mutex_unlock( &fLock.DW_FLOCK ); break; case TYPE_OF_TXXX: if( loadArg.sType == INBOX) { Pthread_mutex_lock( &fLock.TXINDEX_FLOCK ); Pthread_mutex_lock( &countTXINDEX_Mutex ); MergeRecords( TYPE_OF_TXXX ); /* Alloacate the memory of message array.*/ if( loadArg.mesgCount <= AUTOROLLVAL_TX ) { loadedMesg.commInfo = (COMMINFO *)malloc( LEN_COMMINFO * loadArg.mesgCount); fp = Fopen( "TXINDEX.data","r+"); rewind(fp); for( i=0; i<loadArg.mesgCount; i++) /******Problem here,can't use the wrapper function Fread()*******/
if( fread( &( (loadedMesg.commInfo)[i].txIndex), LEN_TXINDEX, 1, fp) != 1)
{
if( feof(fp))
{
Fclose(fp);
break;
}
perror("File read error!");
} else { (loadedMesg.commInfo)[i].index = i+1; printf("Index is %d.\n",(loadedMesg.commInfo)[i].index); printf("File content:Hour %d Min %d SRCID %lX,MainIndex is %d\n",loadedMesg.commInfo[i].txIndex.hour,loadedMesg.commInfo[i].txIndex.minute,loadedMesg.commInfo[i].txIndex.srcID, loadedMesg.commInfo[i].txIndex.mainIndex ); printf(" Address of the message %d is %lX.\n",i,&loadedMesg.commInfo[i] ); } Fclose( fp ); /* Alloacate the memory of address array for message */
q= loadedMesg.pCommInfo = malloc( LEN_P_COMMINFO * loadArg.mesgCount ); printf(" Address of the address array head is %lX.\n",loadedMesg.pCommInfo ); for( i=0; i<loadArg.mesgCount; i++) { *q = &loadedMesg.commInfo[i]; if( loadedMesg.commInfo[i].txIndex.lockSymbol == 0 ) loadedMesg.countOfUnread++; printf(" Address of the message pointer %d is %lX.\n",i,*q ); q++; } } else //AutoRollBack the supposed numbers of records { loadedMesg.commInfo = (COMMINFO *)malloc( LEN_COMMINFO * AUTOROLLVAL_TX); fp = Fopen( "TXINDEX.data","r+"); fseek( fp, ( loadArg.mesgCount-AUTOROLLVAL_TX )*LEN_TXINDEX, SEEK_SET ); for( i=0; i<AUTOROLLVAL_TX; i++) /******Problem here,can't use the wrapper function Fread()*******/
if( fread( &( (loadedMesg.commInfo)[i].txIndex), LEN_TXINDEX, 1, fp) != 1)
{
if( feof(fp))
{
Fclose(fp);
break;
}
perror("File read error!");
} else { (loadedMesg.commInfo)[i].index = i+1; printf("Index is %d.\n",(loadedMesg.commInfo)[i].index); printf("File content:Hour %d Min %d SRCID %lX,MainIndex is %d\n",loadedMesg.commInfo[i].txIndex.hour,loadedMesg.commInfo[i].txIndex.minute,loadedMesg.commInfo[i].txIndex.srcID,loadedMesg.commInfo[i].txIndex.mainIndex ); printf(" Address of the message %d is %lX.\n",i,&loadedMesg.commInfo[i] ); } Fclose( fp ); /* Alloacate the memory of address array for message */
q= loadedMesg.pCommInfo = malloc( LEN_P_COMMINFO * AUTOROLLVAL_TX ); printf(" Address of the address array head is %lX.\n",loadedMesg.pCommInfo ); for( i=0; i<AUTOROLLVAL_TX; i++) { *q = &loadedMesg.commInfo[i]; if( loadedMesg.commInfo[i].txIndex.lockSymbol == 0 ) loadedMesg.countOfUnread++; printf(" Address of the message pointer %d is %lX.\n",i,*q ); q++; } loadArg.mesgCount = AUTOROLLVAL_TX; /* Rewrite the records to file to keep the latest AUTOROLLVAL_DW numbers of records */ SaveData( INBOX, TYPE_OF_TXXX, AUTOROLLVAL_TX ); countTXINDEX = AUTOROLLVAL_TX; } sleep(4); Pthread_mutex_unlock( &countTXINDEX_Mutex ); Pthread_mutex_unlock( &fLock.TXINDEX_FLOCK ); loadedMesg.countOfMesg = loadArg.mesgCount; /***** Test delete **************/ deleteArg.sType = INBOX; deleteArg.mesgType = TYPE_OF_TXXX; deleteArg.mode = MUTIPLEMODE; deleteArg.arg = (void **)loadedMesg.pCommInfo; deleteArg.index = 3; CheckTidCount(); Pthread_create( &tid_DatProcess[tidCount], &attr, Delete, NULL); break; /*case TYPE_OF_ICXX: break; case TYPE_OF_ZJXX: break; case TYPE_OF_SJXX: break; case TYPE_OF_BBXX: break; case TYPE_OF_FKXX: break;*/ } else if( loadArg.sType == OUTBOX ) { if( loadArg.mesgCount <= AUTOROLLVAL_TXOUT ) { loadedMesg.commInfoOut = (COMMINFO *)malloc( LEN_COMMINFO * loadArg.mesgCount); fp = Fopen( "TXINDEX_OUT.data","r+"); rewind(fp); for( i=0; i<loadArg.mesgCount; i++)
if( fread( &( (loadedMesg.commInfoOut)[i].txIndex), LEN_TXINDEX, 1, fp) != 1)
{
if( feof(fp))
{
Fclose(fp);
break;
}
perror("File read error!");
} else { (loadedMesg.commInfoOut)[i].index = i+1; printf("Index is %d.\n",(loadedMesg.commInfoOut)[i].index); printf("File content:Hour %d Min %d SRCID %lX,MainIndex is %d\n",loadedMesg.commInfoOut[i].txIndex.hour,loadedMesg.commInfoOut[i].txIndex.minute,loadedMesg.commInfoOut[i].txIndex.srcID, loadedMesg.commInfoOut[i].txIndex.mainIndex ); printf(" Address of the message %d is %lX.\n",i,&loadedMesg.commInfo[i] ); } Fclose( fp ); /* Alloacate the memory of address array for message */
q= loadedMesg.pCommInfoOut = malloc( LEN_P_COMMINFO * loadArg.mesgCount ); printf(" Address of the address array head is %lX.\n",loadedMesg.pCommInfoOut ); for( i=0; i<loadArg.mesgCount; i++) { *q = &loadedMesg.commInfoOut[i]; if( loadedMesg.commInfoOut[i].txIndex.lockSymbol == 0 ) loadedMesg.countOfUnread++; printf(" Address of the message pointer %d is %lX.\n",i,*q ); q++; } } else //AutoRollBack the supposed numbers of records { loadedMesg.commInfoOut = (COMMINFO *)malloc( LEN_COMMINFO * AUTOROLLVAL_TXOUT); fp = Fopen( "TXINDEX.data","r+"); fseek( fp, ( loadArg.mesgCount-AUTOROLLVAL_TXOUT )*LEN_TXINDEX, SEEK_SET ); for( i=0; i<AUTOROLLVAL_TXOUT; i++) /******Problem here,can't use the wrapper function Fread()*******/
if( fread( &( (loadedMesg.commInfoOut)[i].txIndex), LEN_TXINDEX, 1, fp) != 1)
{
if( feof(fp))
{
Fclose(fp);
break;
}
perror("File read error!");
} else { (loadedMesg.commInfoOut)[i].index = i+1; printf("Index is %d.\n",(loadedMesg.commInfoOut)[i].index); printf("File content:Hour %d Min %d SRCID %lX,MainIndex is %d\n",loadedMesg.commInfoOut[i].txIndex.hour,loadedMesg.commInfoOut[i].txIndex.minute,loadedMesg.commInfoOut[i].txIndex.srcID,loadedMesg.commInfoOut[i].txIndex.mainIndex ); printf(" Address of the message %d is %lX.\n",i,&loadedMesg.commInfoOut[i] ); } Fclose( fp ); /* Alloacate the memory of address array for message */
q= loadedMesg.pCommInfoOut = malloc( LEN_P_COMMINFO * AUTOROLLVAL_TXOUT ); printf(" Address of the address array head is %lX.\n",loadedMesg.pCommInfo ); for( i=0; i<AUTOROLLVAL_TXOUT; i++) { *q = &loadedMesg.commInfoOut[i]; if( loadedMesg.commInfoOut[i].txIndex.lockSymbol == 0 ) loadedMesg.countOfUnread++; printf(" Address of the message pointer %d is %lX.\n",i,*q ); q++; } loadArg.mesgCount = AUTOROLLVAL_TXOUT; /* Rewrite the records to file to keep the latest AUTOROLLVAL_DW numbers of records */ SaveData( OUTBOX, TYPE_OF_TXXX, AUTOROLLVAL_TXOUT ); countTXIDXOut = AUTOROLLVAL_TXOUT; } } loadedMesg.countOfMesg = loadArg.mesgCount; }//End of switch tidCount--; return( NULL ); }void UnloadData( SOURCETYPE sType, MESGTYPE mesgType ){ //Async the updated data in the buffer to the file //Then release the memory in the buffer switch( mesgType ) { case TYPE_OF_DWXX: free( loadedMesg.locInfo ); free( loadedMesg.pLocInfo ); break; case TYPE_OF_TXXX: if( sType == INBOX ) { free( loadedMesg.commInfo ); free( loadedMesg.pCommInfo ); } else if( sType == OUTBOX ) { free( loadedMesg.commInfoOut ); free( loadedMesg.pCommInfoOut ); } break; }//End of switch }/* Use the method of quick sort to resort the records */void QSort( SORTTYPE sortType, LOCINFO **head, LOCINFO **rear ){ long tmp; int tHour,tMin,tSec; LOCINFO **h, **r,*t; if( head < rear ) { h = head, r = rear,t = *head; //printf(" t is %X \n",(t)->dwxx.DESID); switch( sortType ) { case SORT_BY_ADDRESS: /* Sort the records by source user ID */ tmp = (*h)->dwxx.srcID; while( h != r ) { /***********************Problem here !********************************/ while( ( (*r)->dwxx.srcID >= tmp) && r != h ) r--; *h = *r; while( ( (*h)->dwxx.srcID <= tmp) && r != h ) h++; *r = *h; } *h = t; QSort( SORT_BY_ADDRESS, head, h-1 ); QSort( SORT_BY_ADDRESS, h+1, rear ); break; case SORT_BY_TIMEASC: /* Sort the records by time in the ascend order */ tHour = (*h)->dwxx.hour; tMin = (*h)->dwxx.minute; tSec = (*h)->dwxx.second; while( h != r ) { while( ((*r)->dwxx.hour >= tHour) && ((*r)->dwxx.minute >= tMin) && ((*r)->dwxx.second >= tSec ) && r != h ) r--; h = r; while( ((*h)->dwxx.hour <= tHour) && ((*h)->dwxx.minute <= tMin) && ((*h)->dwxx.second <= tSec ) && r != h ) h++; r = h; } *h = t; QSort( SORT_BY_TIMEASC, head, h-1 ); QSort( SORT_BY_TIMEASC, h+1, rear ); break; case SORT_BY_TIMEDES: /* Sort the records by time in the descend order */ tHour = (*h)->dwxx.hour; tMin = (*h)->dwxx.minute; tSec = (*h)->dwxx.second; while( h != r ) { while( ((*r)->dwxx.hour <= tHour) && ((*r)->dwxx.minute <= tMin) && ((*r)->dwxx.second <= tSec ) && r != h ) r--; h = r; while( ((*h)->dwxx.hour >= tHour) && ((*h)->dwxx.minute >= tMin) && ((*h)->dwxx.second >= tSec ) && r != h ) h++; r = h; } *h = t; QSort( SORT_BY_TIMEDES, head, h-1 ); QSort( SORT_BY_TIMEDES, h+1, rear ); break; case SORT_BY_SOURCE: /********???????what is data source ?????????*****/ break; } } }/* Sort the records by ordered condition */void Sort( SORTTYPE sortType, LOCINFO **srcArray, int arryLen ){ int i,j; LOCINFO **p; switch( sortType ) { case SORT_BY_ADDRESS: /* Sort the records by source user ID */ j = arryLen-1; /*printf(" Offset value i is %d\n",j); printf(" SrcArray address is %X\n",srcArray); p= srcArray; printf(" Address of the address array head is %lX.\n",p ); for( i=0; i<GetCount( TYPE_OF_DWXX ); i++) { printf(" Address of the message pointer %d is %lX.\n",i,*p ); p++; }*/ printf("Enter QSort now.\n"); QSort( SORT_BY_ADDRESS, srcArray, srcArray+j ); for( p= srcArray; p<=srcArray+j; p++ ) printf("After sorted:Hour %d Min %d SRCID %lX\n",(*p)->dwxx.hour,(*p)->dwxx.minute,(*p)->dwxx.srcID ); break; case SORT_BY_TIMEASC: /* Sort the records by time in the ascend order */ QSort( SORT_BY_TIMEASC, srcArray, srcArray + arryLen-1 ); break; case SORT_BY_TIMEDES: /* Sort the records by time in the descend order */ QSort( SORT_BY_TIMEDES, srcArray, srcArray + arryLen-1 ); break; case SORT_BY_SOURCE: break; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -