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

📄 mainserv.c

📁 这是一个进程通信和手机数据处理程序, 与以前发的手机界面一起构成一个简单手机系统,是我们做的第一个版本,供大家一起学习
💻 C
📖 第 1 页 / 共 5 页
字号:
			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 + -