📄 mainserv.c
字号:
(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 ); if( mesgCount != 0 ) /* Alloacate the memory of address array for message */
p= loadedMesg.pLocInfo = malloc( LEN_P_LOCINFO * mesgCount ); printf(" Address of the address array head is %lX.\n",loadedMesg.pLocInfo ); for( i=0; i<mesgCount; i++) { *p = &loadedMesg.locInfo[i]; printf(" Address of the message pointer %d is %lX.\n",i,*p ); p++; } loadedMesg.countOfMesg = mesgCount; } else //AutoRollBack the supposed numbers of records { loadedMesg.locInfo = (LOCINFO *)malloc( LEN_LOCINFO * AUTOROLLVAL_DW); fp = Fopen( "DWXX.data","r+"); fseek( fp, ( mesgCount-AUTOROLLVAL_DW )*LEN_DWXX, SEEK_SET ); printf("Position is %d\n",mesgCount-AUTOROLLVAL_DW ); printf("LEN_DWXX is %d\n",LEN_DWXX); printf("(mesgCount-AUTOROLLVAL_DW)*LEN_DWXX is %d\n",( mesgCount-AUTOROLLVAL_DW )*LEN_DWXX); 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 ); if( mesgCount != 0 ) /* 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 ); countDWXX = AUTOROLLVAL_DW; ProcTerminate( DW, countDWXX ); } Pthread_mutex_unlock( &countDW_Mutex ); Pthread_mutex_unlock( &fLock.DW_FLOCK ); break; case TYPE_OF_TXXX: if( sType == INBOX) { UnloadData( INBOX, TYPE_OF_TXXX); Pthread_mutex_lock( &fLock.TXINDEX_FLOCK ); Pthread_mutex_lock( &countTXINDEX_Mutex ); MergeRecords( TYPE_OF_TXXX ); /* Alloacate the memory of message array.*/ if( mesgCount <= AUTOROLLVAL_TX ) { loadedMesg.commInfo = (COMMINFO *)malloc( LEN_COMMINFO * mesgCount); fp = Fopen( "TXINDEX.data","r+"); rewind(fp); for( i=0; i<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 LockSymbol %d \n",loadedMesg.commInfo[i].txIndex.hour,loadedMesg.commInfo[i].txIndex.minute,loadedMesg.commInfo[i].txIndex.srcID, loadedMesg.commInfo[i].txIndex.mainIndex,loadedMesg.commInfo[i].txIndex.lockSymbol ); printf(" Address of the message %d is %lX.\n",i,&loadedMesg.commInfo[i] ); } Fclose( fp ); if( mesgCount != 0 ) /* Alloacate the memory of address array for message */
q= loadedMesg.pCommInfo = malloc( LEN_P_COMMINFO * mesgCount ); printf(" Address of the address array head is %lX.\n",loadedMesg.pCommInfo ); for( i=0; i<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++; } } Pthread_mutex_unlock( &countTXINDEX_Mutex ); Pthread_mutex_unlock( &fLock.TXINDEX_FLOCK ); loadedMesg.countOfMesg = mesgCount; printf("loadedMesg.countOfUnread is %d\n",loadedMesg.countOfUnread); break; } else if( sType == OUTBOX ) { UnloadData( OUTBOX, TYPE_OF_TXXX); if( mesgCount <= AUTOROLLVAL_TXOUT ) { loadedMesg.commInfoOut = (COMMINFO *)malloc( LEN_COMMINFO * mesgCount); fp = Fopen( "TXINDEX_OUT.data","r+"); rewind(fp); for( i=0; i<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 LockSymbol is %d\n",loadedMesg.commInfoOut[i].txIndex.hour,loadedMesg.commInfoOut[i].txIndex.minute,loadedMesg.commInfoOut[i].txIndex.srcID, loadedMesg.commInfoOut[i].txIndex.mainIndex,loadedMesg.commInfoOut[i].txIndex.lockSymbol ); printf(" Address of the message %d is %lX.\n",i,&loadedMesg.commInfo[i] ); } Fclose( fp ); if( mesgCount != 0 ) /* Alloacate the memory of address array for message */
q= loadedMesg.pCommInfoOut = malloc( LEN_P_COMMINFO * mesgCount ); printf(" Address of the address array head is %lX.\n",loadedMesg.pCommInfoOut ); for( i=0; i<mesgCount; i++) { *q = &loadedMesg.commInfoOut[i]; if( loadedMesg.commInfoOut[i].txIndex.lockSymbol == 0 ) loadedMesg.countOfUnread ++; q++; } } else //AutoRollBack the supposed numbers of records { loadedMesg.commInfoOut = (COMMINFO *)malloc( LEN_COMMINFO * AUTOROLLVAL_TXOUT); fp = Fopen( "TXINDEX_OUT.data","r+"); fseek( fp, ( 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++; } mesgCount = AUTOROLLVAL_TXOUT; /* Rewrite the records to file to keep the latest AUTOROLLVAL_DW numbers of records */ SaveData( OUTBOX, TYPE_OF_TXXX, AUTOROLLVAL_TXOUT ); ResetCount( OUTBOX, TYPE_OF_TXXX, AUTOROLLVAL_TXOUT); } } loadedMesg.countOfMesg = mesgCount; break; }//End of switch tidCount--; }void UnloadData( SOURCETYPE sType, MESGTYPE mesgType ){ printf("-----------Enter func UnlaodData() now!------------\n"); //Async the updated data in the buffer to the file //Then release the memory in the buffer switch( mesgType ) { case TYPE_OF_DWXX: if( sType == INBOX && loadedMesg.locInfo != NULL || loadedMesg.pLocInfo!=NULL) { printf("******************Start to free!**********************\n"); free( loadedMesg.locInfo ); free( loadedMesg.pLocInfo ); loadedMesg.locInfo = NULL; loadedMesg.pLocInfo = NULL; } break; case TYPE_OF_TXXX: if( sType == INBOX && loadedMesg.commInfo != NULL || loadedMesg.pCommInfo!=NULL) { free( loadedMesg.commInfo ); free( loadedMesg.pCommInfo ); loadedMesg.commInfo = NULL; loadedMesg.pCommInfo = NULL; } else if( sType==OUTBOX && loadedMesg.commInfoOut!=NULL ||loadedMesg.pCommInfoOut!= NULL) { printf("*****************Unload now!*************\n"); free( loadedMesg.commInfoOut ); free( loadedMesg.pCommInfoOut ); loadedMesg.commInfoOut = NULL; loadedMesg.pCommInfoOut = NULL; } break; case TYPE_OF_ICXX: if( loadedMesg.icInfo != NULL) { free( loadedMesg.icInfo ); loadedMesg.icInfo = NULL; } break; case TYPE_OF_BBXX: if( loadedMesg.bbInfo != NULL) { free( loadedMesg.bbInfo ); loadedMesg.bbInfo = NULL; } break; case TYPE_OF_FKXX: if( loadedMesg.fkInfo != NULL ) { free( loadedMesg.fkInfo ); loadedMesg.fkInfo = NULL; } break; }//End of switch loadedMesg.countOfMesg = 0; loadedMesg.countOfUnread = 0;}int CompareTime( int bigger, LOCINFO **p,int year, int mon, int day,int hour, int min, int sec ){ if( bigger ) { if( (*p)->dwxx.year > year) return 1; else if( (*p)->dwxx.year == year ) { if( (*p)->dwxx.mon > mon) return 1; else if( (*p)->dwxx.mon == mon ) { if( (*p)->dwxx.day > day) return 1; else if( (*p)->dwxx.day == day ) { if( (*p)->dwxx.hour > hour ) return 1; else if( (*p)->dwxx.hour == hour ) { if( (*p)->dwxx.minute > min ) return 1; else if( (*p)->dwxx.minute == min ) { if( (*p)->dwxx.second >= sec ) return 1; else return 0; } else return 0; } else return 0; } else return 0; } else return 0; } else return 0; } else { if( (*p)->dwxx.year < year) return 1; else if( (*p)->dwxx.year == year ) { if( (*p)->dwxx.mon < mon) return 1; else if( (*p)->dwxx.mon == mon ) { if( (*p)->dwxx.day < day) return 1; else if( (*p)->dwxx.day == day ) { if( (*p)->dwxx.hour < hour ) return 1; else if( (*p)->dwxx.hour == hour ) { if( (*p)->dwxx.minute < min ) return 1; else if( (*p)->dwxx.minute == min ) { if( (*p)->dwxx.second <= sec ) return 1; else return 0; } else return 0; } else return 0; } else return 0; } else return 0; } else return 0; }}/* Use the method of quick sort to resort the records */void QSort( SORTTYPE sortType, LOCINFO **head, LOCINFO **rear ){ long tmp; int tYear,tMon,tDay,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 */ tYear = (*h)->dwxx.year, tMon = (*h)->dwxx.mon, tDay = (*h)->dwxx.day, tHour = (*h)->dwxx.hour; tMin = (*h)->dwxx.minute; tSec = (*h)->dwxx.second; while( h != r ) { while( CompareTime(TRUE,r,tYear,tMon,tDay,tHour,tMin,tSec) && r!=h ) r--; *h = *r; while( CompareTime( FALSE,h,tYear,tMon,tDay,tHour,tMin,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 */ tYear = (*h)->dwxx.year, tMon = (*h)->dwxx.mon, tDay = (*h)->dwxx.day, tHour = (*h)->dwxx.hour; tMin = (*h)->dwxx.minute; tSec = (*h)->dwxx.second; while( h != r ) { while( CompareTime(FALSE,r,tYear,tMon,tDay,tHour,tMin,tSec) && r!=h ) r--; *h = *r; while( CompareTime( TRUE,h,tYear,tMon,tDay,tHour,tMin,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:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -