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

📄 mainserv.c~

📁 这是一个进程通信和手机数据处理程序, 与以前发的手机界面一起构成一个简单手机系统,是我们做的第一个版本,供大家一起学习
💻 C~
📖 第 1 页 / 共 5 页
字号:
#ifndef _MAINSERV_C_#define _MAINSERV_C_ 0#include "MySHM.h"#include "Wrapper.c"#include "CircularQueue.c"#define	AUTOROLLVAL_DW	2#define 	AUTOROLLVAL_TX	4#define	AUTOROLLVAL_TXOUT  4int 		countDWXX=0;int 		tmpDWXX1=0;	//Counter of DWXX in the temp file 1int 		tmpDWXX2=0;	//Counter of DWXX in the temp file 2 int 		countTXIDXOut=0; //Counter of sended TXXX in file TXINDEX_OUT.dataint 		countTXMNOut=0;	 int 		countTXMAIN=0;int 		countTXINDEX=0;int 		tmpTXXX1=0;	//Counter of TXXX in the temp file 1int 		tmpTXXX2=0;	//Counter of TXXX in the temp file 2 int 		fRecords=0;	//Counter of founded message numberint 		tidCount=0;  //Counter of threads numberpthread_mutex_t	countDW_Mutex;pthread_mutex_t	countTXINDEX_Mutex;pthread_mutex_t	countTXMAIN_Mutex;pthread_attr_t	attr;pthread_t		tid_DatProcess[MAXNTHREADS];	    void *Delete( void *arg );/* Check if the id of a thread is out of range */void CheckTidCount( void ){	if( tidCount > MAXNTHREADS )		tidCount = 0;	else		tidCount++;}void PrintForTest( LOCINFO **srcArray,COMMINFO **srcArray1 ){	int j;	LOCINFO **p;	COMMINFO **q;		if( srcArray != NULL )	{		for( p= srcArray; p<=srcArray+fRecords-1; p++ )				printf("Now it is:Hour %d Min %d DESID %lX Index %d \n",(*p)->dwxx.hour,(*p)->dwxx.minute,(*p)->dwxx.srcID,(*p)->index );	}	if( srcArray1 != NULL )	{		for( q= srcArray1; q<=srcArray1+fRecords-1; q++ )				printf("Now it is:Hour %d Min %d SRCID %lX Index %d \n",(*q)->txIndex.hour,(*q)->txIndex.minute,(*q)->txIndex.srcID,(*q)->index );	}}int CompareLocTime( QueryFilter filter, LOCINFO **p  ){	if( p == NULL )		err_sys("Error occurred-> Empty records in memory!");	printf("Time is %d %d %d\n ",(*p)->dwxx.hour,(*p)->dwxx.minute,(*p)->dwxx.second);	printf("Filter stime is %d %d %d\n",filter.sTime.hour,filter.sTime.min,filter.sTime.sec);	printf("Filter etime is %d %d %d\n",filter.eTime.hour,filter.eTime.min,filter.eTime.sec);	/* Compare the current record with given search condition */	if( ( ((*p)->dwxx.hour >= filter.sTime.hour) && ((*p)->dwxx.hour <= filter.eTime.hour)) && (( (*p)->dwxx.minute >= filter.sTime.min) && ( (*p)->dwxx.minute <= filter.eTime.min) ) && ( ( (*p)->dwxx.second >= filter.sTime.sec) && ( (*p)->dwxx.second <= filter.eTime.sec) ))		return 1;	else		return 0;} void	 ReCountMain( int value ){	Pthread_mutex_lock( &countTXMAIN_Mutex );	countTXMAIN = value;	Pthread_mutex_unlock( &countTXMAIN_Mutex );}int	GetCountMain( void ){	int counter;				Pthread_mutex_lock( &countTXMAIN_Mutex );	counter = countTXMAIN;	Pthread_mutex_unlock( &countTXMAIN_Mutex );			return counter;}int  AddCountMain( int increment ){	int counter;	Pthread_mutex_lock( &countTXMAIN_Mutex );	counter = countTXMAIN = countTXMAIN + increment;	Pthread_mutex_unlock( &countTXMAIN_Mutex );	return counter;}int ReduceCountMain( int increment ){	int counter;		Pthread_mutex_lock( &countTXMAIN_Mutex );	counter = countTXMAIN = countTXMAIN - increment;	Pthread_mutex_unlock( &countTXMAIN_Mutex );			return counter;}/* Reset the count of current  different message */void   ResetCount( MESGTYPE mesgType, int value){		switch( mesgType )	{	case	TYPE_OF_DWXX: 				Pthread_mutex_lock( &countDW_Mutex );		countDWXX = value;		Pthread_mutex_unlock( &countDW_Mutex );		break;	case	TYPE_OF_TXXX:		Pthread_mutex_lock( &countTXINDEX_Mutex );		countTXINDEX = value;		Pthread_mutex_unlock( &countTXINDEX_Mutex );				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;	}	}/* Return  the count of current  different message in the file */int  GetCount( MESGTYPE mesgType){	int counter = 0;		switch( mesgType )	{	case	TYPE_OF_DWXX: 		Pthread_mutex_lock( &countDW_Mutex );		counter = countDWXX;		Pthread_mutex_unlock( &countDW_Mutex );		return counter;		break;	case	TYPE_OF_TXXX:		Pthread_mutex_lock( &countTXINDEX_Mutex );		counter = countTXINDEX;		Pthread_mutex_unlock( &countTXINDEX_Mutex );		return counter;		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;	}	Pthread_mutex_unlock( &countDW_Mutex );}/* Modify the count of current  different message in the file */void AddCount( MESGTYPE mesgType,int increment){		switch( mesgType )	{	case	TYPE_OF_DWXX: 		Pthread_mutex_lock( &countDW_Mutex );		countDWXX = countDWXX + increment;		Pthread_mutex_unlock( &countDW_Mutex );		break;	case	TYPE_OF_TXXX:				Pthread_mutex_lock( &countTXINDEX_Mutex );		countTXINDEX = countTXINDEX + increment;		Pthread_mutex_unlock( &countTXINDEX_Mutex );		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;	}	}void ReduceCount( MESGTYPE mesgType,int decrement ){		switch( mesgType )	{	case	TYPE_OF_DWXX: 		Pthread_mutex_lock( &countDW_Mutex );		countDWXX = countDWXX - decrement;		Pthread_mutex_unlock( &countDW_Mutex );		break;	case	TYPE_OF_TXXX:		Pthread_mutex_lock( &countTXINDEX_Mutex );		countTXINDEX = countTXINDEX - decrement;		Pthread_mutex_unlock( &countTXINDEX_Mutex );		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;	}	}/* Store the newcomming message to Temporary file 1 or 2*/int TempStore( MESGTYPE mesgType, TMPSTOREMODE mode){	int  ret;	FILE *fp;	struct stat buf; 	printf("Enter TempStore.\n");	switch( mesgType )	{	case	TYPE_OF_DWXX: 		if( mode == CREAT )		{			printf("**********Add newly message to file_DWtmp1************\n");			Pthread_mutex_trylock( &fLock.DWtmp1_FLOCK);			fp = Fopen( "DWtmp1.data","a+");			Fwrite( &newMesg.dwxx,LEN_DWXX,1,fp );			Fclose( fp );			AddCount( TYPE_OF_DWXX , 1);			tmpDWXX1++;			printf("File DWtmp1 is %d\n",tmpDWXX1);			Pthread_mutex_unlock( &fLock.DWtmp1_FLOCK );			return 1;		}		else if( mode == QUERY)		{			if( stat( "DWtmp1.data",&buf ) == 0 )			{	//file DWtmp1 exist				printf("File DWtmp1 exist!\n" );				if( (ret=Pthread_mutex_trylock( &fLock.DWtmp1_FLOCK)) == EBUSY )				{					//Add newly message to file_DWtmp2					Pthread_mutex_trylock( &fLock.DWtmp2_FLOCK);					printf("**********Add newly message to file_DWtmp2************\n");					fp = Fopen( "DWtmp2.data","a+");					Fwrite( &newMesg.dwxx,LEN_DWXX,1,fp );					Fclose( fp );					AddCount( TYPE_OF_DWXX , 1);					tmpDWXX2++;					printf("tmpDWXX2 is %d\n",tmpDWXX2);					Pthread_mutex_unlock( &fLock.DWtmp2_FLOCK);					return 1;				}				else if( ret == 0 )				{					//Add newly message to file_DWtmp1					printf("**********Add newly message to file_DWtmp1************\n");					fp = Fopen( "DWtmp1.data","a+");					Fwrite( &newMesg.dwxx,LEN_DWXX,1,fp );					Fclose( fp );					AddCount( TYPE_OF_DWXX , 1);					tmpDWXX1++;					printf("tmpDWXX1 is %d\n",tmpDWXX1);					Pthread_mutex_unlock( &fLock.DWtmp1_FLOCK );					return 1;					}							}			else if( stat( "DWtmp2.data",&buf ) == 0 )//file DWtmp2 exist			{				printf("File DWtmp2 exist!\n" );				if( (ret=Pthread_mutex_trylock( &fLock.DWtmp2_FLOCK )) == EBUSY )				{					//Add newly message to file_DWtmp1					Pthread_mutex_trylock( &fLock.DWtmp1_FLOCK);					printf("**********Add newly message to file_DWtmp1************\n");					fp = Fopen( "DWtmp1.data","a+");					Fwrite( &newMesg.dwxx,LEN_DWXX,1,fp );					Fclose( fp );					AddCount( TYPE_OF_DWXX , 1);					tmpDWXX2++;					printf("tmpDWXX2 is %d\n",tmpDWXX2);					Pthread_mutex_unlock( &fLock.DWtmp1_FLOCK);					return 1;				}					else if( ret == 0)				{					//Add newly message to file_DWtmp2					printf("**********Add newly message to file_DWtmp2************\n");					fp = Fopen( "DWtmp2.data","a+");					Fwrite( &newMesg.dwxx,LEN_DWXX,1,fp );					Fclose( fp );					AddCount( TYPE_OF_DWXX , 1);					tmpDWXX1++;					printf("tmpDWXX1 is %d\n",tmpDWXX1);					Pthread_mutex_unlock( &fLock.DWtmp2_FLOCK );					return 1;				}			}			else			{				printf("Leave TempStore.\n");				return 0;			}		} 		break;	case	TYPE_OF_TXXX:		if( mode == CREAT )		{			printf("**********Add newly message to file_TXtmp1************\n");			Pthread_mutex_trylock( &fLock.TXtmp1_FLOCK);			fp = Fopen( "TXtmp1.data","a+");			Fwrite( &newMesg.txIndex,LEN_TXINDEX,1,fp );			Fclose( fp );			AddCount( TYPE_OF_TXXX , 1);			tmpTXXX1++;			printf("tmpTXXX1 is %d\n",tmpTXXX1);			Pthread_mutex_unlock( &fLock.TXtmp1_FLOCK );			return 1;		}		else if( mode == QUERY)		{			if( stat( "TXtmp1.data",&buf ) == 0 )			{	//file TXtmp1 exist				printf("File F_TXtmp1 exist!\n" );				if( (ret=Pthread_mutex_trylock( &fLock.TXtmp1_FLOCK)) == EBUSY )				{					//Add newly message to file_TXtmp2					Pthread_mutex_trylock( &fLock.TXtmp2_FLOCK);					printf("**********Add newly message to file_TXtmp2************\n");					fp = Fopen( "TXtmp2.data","a+");					Fwrite( &newMesg.txIndex,LEN_TXINDEX,1,fp );					Fclose( fp );					AddCount( TYPE_OF_TXXX , 1);					tmpTXXX2++;					printf("tmpDWXX2 is %d\n",tmpTXXX2);					Pthread_mutex_unlock( &fLock.TXtmp2_FLOCK);					return 1;				}				else if( ret == 0 )				{					//Add newly message to file_TXtmp1					printf("**********Add newly message to file_TXtmp1************\n");					fp = Fopen( "TXtmp1.data","a+");					Fwrite( &newMesg.txIndex,LEN_TXINDEX,1,fp );					Fclose( fp );					AddCount( TYPE_OF_TXXX , 1);					tmpTXXX1++;					printf("tmpTXXX1 is %d\n",tmpTXXX1);					Pthread_mutex_unlock( &fLock.TXtmp1_FLOCK );					return 1;					}							}			else if( stat( "TXtmp2.data",&buf ) == 0 )//file DWtmp2 exist			{				printf("File F_TXtmp2 exist!\n" );				if( (ret=Pthread_mutex_trylock( &fLock.TXtmp2_FLOCK )) == EBUSY )				{					//Add newly message to file_TXtmp1					Pthread_mutex_trylock( &fLock.TXtmp1_FLOCK);					printf("**********Add newly message to file_DWtmp1************\n");					fp = Fopen( "TXtmp1.data","a+");					Fwrite( &newMesg.txIndex,LEN_TXINDEX,1,fp );					Fclose( fp );					AddCount( TYPE_OF_TXXX , 1);					tmpTXXX2++;					printf("tmpTXXX2 is %d\n",tmpTXXX2);					Pthread_mutex_unlock( &fLock.TXtmp1_FLOCK);					return 1;				}					else if( ret == 0)				{					//Add newly message to file_TXtmp2					printf("**********Add newly message to file_TXtmp2************\n");					fp = Fopen( "TXtmp2.data","a+");					Fwrite( &newMesg.dwxx,LEN_DWXX,1,fp );					Fclose( fp );					AddCount( TYPE_OF_TXXX , 1);					tmpTXXX1++;					printf("tmpTXXX1 is %d\n",tmpTXXX1);					Pthread_mutex_unlock( &fLock.TXtmp2_FLOCK );					return 1;				}			}			else			{				printf("Leave TempStore.\n");				return 0;			}		} 

⌨️ 快捷键说明

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