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

📄 mainserv.c

📁 这是一个进程通信和手机数据处理程序, 与以前发的手机界面一起构成一个简单手机系统,是我们做的第一个版本,供大家一起学习
💻 C
📖 第 1 页 / 共 5 页
字号:
		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;	}		}/* Automatically  write the new record to the appropriate file */void AutoRecord( MESGTYPE mesgType){	int  ret;	FILE *fp;	printf("Enter AutoRecord.\n");	switch( mesgType )	{	case	TYPE_OF_DWXX: 		//If there is no temp file in current directory,we can record it to main file directly		if( TempStore( TYPE_OF_DWXX, QUERY ) == 0 )		{	//try to lock the mutex			printf("Enter tryLock.\n");			if( (ret=Pthread_mutex_trylock( &fLock.DW_FLOCK)) == 0 ) 			{				//Add newly message to file_DWXX				printf("Return value is %d \n",ret);				printf("**********Add newly message to file_DWXX************\n");				fp = Fopen( "DWXX.data","a+");				Fwrite( &newMesg.dwxx,LEN_DWXX,1,fp );				Fclose( fp );				AddCount( TYPE_OF_DWXX , 1);				Pthread_mutex_unlock( &fLock.DW_FLOCK);			}			else if( ret == EBUSY )			{				printf("First time bulid DWXX temp file!\n");				TempStore( TYPE_OF_DWXX, CREAT );			}		}						break;	case	TYPE_OF_TXXX:				//If there is no temp file in current directory,we record it to INDEX file directly		if( TempStore( TYPE_OF_TXXX, QUERY ) == 0 )		{	//try to lock the mutex			printf("Enter tryLock.\n");			if( (ret=Pthread_mutex_trylock( &fLock.TXINDEX_FLOCK)) == 0 ) 			{				//Add newly message to file_DWXX				printf("Return value is %d \n",ret);				printf("**********Add newly message to file_TXINDEX************\n");				printf(" MainIndex is %d \n ",newMesg.txIndex.mainIndex);				fp = Fopen( "TXINDEX.data","a+");				Fwrite( &newMesg.txIndex,LEN_TXINDEX,1,fp );				Fclose( fp );				AddCount( TYPE_OF_TXXX , 1);				Pthread_mutex_unlock( &fLock.TXINDEX_FLOCK);			}			else if( ret == EBUSY )			{				printf("First time bulid TXXX temp file!\n");				TempStore( TYPE_OF_TXXX, CREAT );			}		}		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;	}//End of switch}void 	MergeRecords( MESGTYPE mesgType ){	int i;	FILE *fp;	struct stat buf;	/* Before we load the data from main data file */ 	/* we shall firstly merge the temp file to it  */	switch( mesgType )	{	case	TYPE_OF_DWXX: 				if( stat( "DWtmp1.data",&buf ) == 0 )//file DWtmp1 exist		{			Pthread_mutex_lock( &fLock.DWtmp1_FLOCK );			printf("Lock temp1 now.\n");			//Add all the newly messages in the temp file1 to main data file 			loadedMesg.tmpLocInfo = (LOCINFO  *)malloc( LEN_LOCINFO * tmpDWXX1);			printf("Address is %lX\n",loadedMesg.tmpLocInfo);			fp = Fopen( "DWtmp1.data","r+");			//perror("Open");			for( i=0; i<tmpDWXX1; i++)
     				if( fread( &( (loadedMesg.tmpLocInfo)[i].dwxx), LEN_DWXX, 1, fp) != 1)
     				{
       				if( feof(fp))
       					{
         					Fclose(fp);
         					break;
       					}
       				perror("File read error!");
     				}				else				{					(loadedMesg.tmpLocInfo)[i].index = i+1;					printf("Index is %d.\n",(loadedMesg.tmpLocInfo)[i].index);					printf("Tmp File content:Hour %d Min %d SRCID %lX\n",loadedMesg.tmpLocInfo[i].dwxx.hour,loadedMesg.tmpLocInfo[i].dwxx.minute,loadedMesg.tmpLocInfo[i].dwxx.srcID );								}			Fclose( fp );			fp = Fopen( "DWXX.data","a+");			for(  i= 0; i< tmpDWXX1; i++ )				Fwrite( &( (loadedMesg.tmpLocInfo)[i].dwxx),LEN_DWXX,1,fp );			Fclose( fp );					remove( "DWtmp1.data");			tmpDWXX1 = 0;			free( loadedMesg.tmpLocInfo );			Pthread_mutex_unlock( &fLock.DWtmp1_FLOCK );		}		else if( stat( "DWtmp2.data",&buf ) == 0 )//file DWtmp2 exist		{			Pthread_mutex_lock( &fLock.DWtmp2_FLOCK );			//Add all the newly messages in the temp file2 to main data file 			loadedMesg.tmpLocInfo = (LOCINFO  *)malloc( LEN_LOCINFO * tmpDWXX1);			fp = Fopen( "DWtmp2.data","r+");			for( i=0; i<tmpDWXX2; i++)
     				if( fread( &( (loadedMesg.tmpLocInfo)[i].dwxx), LEN_DWXX, 1, fp) != 1)
     				{
       				if( feof(fp))
       					{
         					Fclose(fp);
         					break;
       					}
       				perror("File read error!");
     				}					else				{					(loadedMesg.tmpLocInfo)[i].index = i+1;					printf("Index is %d.\n",(loadedMesg.tmpLocInfo)[i].index);					printf("Tmp File content:Hour %d Min %d SRCID %lX\n",loadedMesg.tmpLocInfo[i].dwxx.hour,loadedMesg.tmpLocInfo[i].dwxx.minute,loadedMesg.tmpLocInfo[i].dwxx.srcID );								}			Fclose( fp );			fp = Fopen( "DWXX.data","a+");			for(  i= 0; i< tmpDWXX2; i++ )				Fwrite( &( (loadedMesg.tmpLocInfo)[i].dwxx),LEN_DWXX,1,fp );			Fclose( fp );			remove( "DWtmp2.data");			free( loadedMesg.tmpLocInfo );			tmpDWXX2 = 0;			Pthread_mutex_unlock( &fLock.DWtmp2_FLOCK );		}						break;	case	TYPE_OF_TXXX:		if( stat( "TXtmp1.data",&buf ) == 0 )//file TXtmp1 exist		{			Pthread_mutex_lock( &fLock.TXtmp1_FLOCK );			printf("Lock TXtmp1 now.\n");			//Add all the newly messages in the temp file1 to main data file 			loadedMesg.tmpCommInfo = (COMMINFO  *)malloc( LEN_COMMINFO * tmpTXXX1);			printf("Address is %lX\n",loadedMesg.tmpCommInfo);			fp = Fopen( "TXtmp1.data","r+");			//perror("Open");			for( i=0; i<tmpTXXX1; i++)
     				if( fread( &((loadedMesg.tmpCommInfo)[i].txIndex), LEN_TXINDEX, 1, fp)!= 1)
     				{
       				if( feof(fp))
       					{
         					Fclose(fp);
         					break;
       					}
       				perror("File read error!");
     				}				else				{					(loadedMesg.tmpCommInfo)[i].index = i+1;					printf("Index is %d.\n",(loadedMesg.tmpCommInfo)[i].index);					printf("Tmp File content:Hour %d Min %d SRCID %lX\n",loadedMesg.tmpCommInfo[i].txIndex.hour,loadedMesg.tmpCommInfo[i].txIndex.minute,loadedMesg.tmpCommInfo[i].txIndex.srcID );								}			Fclose( fp );			fp = Fopen( "TXINDEX.data","a+");			for(  i= 0; i< tmpTXXX1; i++ )				Fwrite( &( (loadedMesg.tmpCommInfo)[i].txIndex),LEN_TXINDEX,1,fp );			Fclose( fp );					remove( "TXtmp1.data");			tmpTXXX1 = 0;			free( loadedMesg.tmpCommInfo );			Pthread_mutex_unlock( &fLock.TXtmp1_FLOCK );		}		else if( stat( "TXtmp2.data",&buf ) == 0 )//file TXtmp2 exist		{			Pthread_mutex_lock( &fLock.TXtmp2_FLOCK );			//Add all the newly messages in the temp file2 to main data file 			loadedMesg.tmpCommInfo = (COMMINFO  *)malloc( LEN_COMMINFO * tmpTXXX1);			fp = Fopen( "TXtmp2.data","r+");			for( i=0; i<tmpTXXX2; i++)
     				if( fread( &((loadedMesg.tmpCommInfo)[i].txIndex), LEN_TXINDEX, 1, fp) != 1)
     				{
       				if( feof(fp))
       					{
         					Fclose(fp);
         					break;
       					}
       				perror("File read error!");
     				}					else				{					(loadedMesg.tmpCommInfo)[i].index = i+1;					printf("Index is %d.\n",(loadedMesg.tmpCommInfo)[i].index);					printf("Tmp File content:Hour %d Min %d SRCID %lX\n",loadedMesg.tmpCommInfo[i].txIndex.hour,loadedMesg.tmpCommInfo[i].txIndex.minute,loadedMesg.tmpCommInfo[i].txIndex.srcID );								}			Fclose( fp );			fp = Fopen( "TXINDEX.data","a+");			for(  i= 0; i< tmpTXXX2; i++ )				Fwrite( &( (loadedMesg.tmpCommInfo)[i].txIndex),LEN_TXINDEX,1,fp );			Fclose( fp );			remove( "TXtmp2.data");			free( loadedMesg.tmpCommInfo );			tmpTXXX2 = 0;			Pthread_mutex_unlock( &fLock.TXtmp2_FLOCK );		}		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;	}//End of switch	}void SaveData( SOURCETYPE sType, MESGTYPE mesgType, int count ){		FILE *fp;	LOCINFO **p;	COMMINFO **q;	switch( mesgType )	{	case	TYPE_OF_DWXX: 		fp = Fopen( "DWXX.data","w+");		rewind( fp );		for( p = loadedMesg.pLocInfo; p<(loadedMesg.pLocInfo+count); p++ )			if( p != NULL )				Fwrite( &((*p)->dwxx),LEN_DWXX,1,fp );		Fclose( fp );		break;	case	TYPE_OF_TXXX:		if( sType == INBOX )		{			fp = Fopen( "TXINDEX.data","w+");			rewind( fp );			for( q = loadedMesg.pCommInfo; q<(loadedMesg.pCommInfo+count); q++ )				if( q != NULL )					Fwrite( &((*q)->txIndex),LEN_TXINDEX ,1,fp );			Fclose( fp );		}		else if( sType == OUTBOX )		{			fp = Fopen( "TXINDEX_OUT.data","w+");			rewind( fp );			for( q = loadedMesg.pCommInfoOut; q<(loadedMesg.pCommInfoOut+count); q++ )				if( q != NULL )					Fwrite( &((*q)->txIndex),LEN_TXINDEX ,1,fp );			Fclose( fp );		}		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;	}}//the following code shall be embedded in liwencheng's procedure void saveSendedItem(  ){	//we shall firstly fill the struct sendedItem to 	//be set then write it to the local file		/*if( datalength <= 20 bytes )	{		//only stored the whole message in file F_TXINDEX		memcpy( newMesg.txIndex.message, ptr->txxx.message,20);		newMesg.txIndex.mainIndex = -1;		}	else	{		// divide the message to two parts,one of it is the      		// content the other part is the indexer of the message  		newMesg.txIndex.mainIndex = ++countTXMNOut;		// Add the big data block to file F_TXMAIN 		if( countTXMNOut <= AUTOROLLVAL_TXOUT)		{			fp = Fopen( "TXMAIN_OUT.data","a+");			Fwrite( &(ptr->txxx.message),MAXSIZE,1,fp );			Fclose( fp );		}		else		{			if( (i = DEQUEUE( OUTBOX )) != 0)			{				fp = Fopen( "TXMAIN_OUT.data","w+");				fseek( fp, (i-1)*LEN_TXINDEX, SEEK_SET );				Fwrite( &(ptr->txxx.message),MAXSIZE,1,fp );				Fclose( fp );			}			else if( i == 0)			{				printf("****Fail to get data for the empty queue****\n");			}		}	}	//whatever,save the indexer of the data 	fp = Fopen( "TXINDEX_OUT.data","a+");	Fwrite( &newMesg.txIndex,LEN_TXINDEX,1,fp );	Fclose( fp );	countTXIDXOut++;		*/}/* Return the length of the message structure array and its address array */void 	*LoadData( void *arg ){	int i;	FILE *fp;	LOCINFO **p;	COMMINFO **q;	struct stat buf; 	printf("Enter LoadData now.\n");	if( loadArg.mesgCount == 0)		printf("NULL records in the file!\n");	loadedMesg.countOfUnread =0;	switch( loadArg.mesgType )	{	case	TYPE_OF_DWXX:				Pthread_mutex_lock( &fLock.DW_FLOCK );		Pthread_mutex_lock( &countTXINDEX_Mutex );		MergeRecords( TYPE_OF_DWXX );		/* Alloacate the memory of message array.*/		if( loadArg.mesgCount <= AUTOROLLVAL_DW )		{			loadedMesg.locInfo = (LOCINFO  *)malloc( LEN_LOCINFO * loadArg.mesgCount);			fp = Fopen( "DWXX.data","r+");			rewind(fp);			for( i=0; i<loadArg.mesgCount; 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 * loadArg.mesgCount );			printf(" Address of the address array head is %lX.\n",loadedMesg.pLocInfo );			for( i=0; i<loadArg.mesgCount; i++)			{				*p = &loadedMesg.locInfo[i];				printf(" Address of the message pointer %d is %lX.\n",i,*p );				p++;			}

⌨️ 快捷键说明

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