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

📄 public.c

📁 UNIX环境下资源监控程序(包含对CPUMEMDISKIOPS等资源的监控)
💻 C
📖 第 1 页 / 共 2 页
字号:
/*						the result is lcza_process get "CMA","CMB"	*/
/*	Remarks															*/
/*																	*/
/*	Modification History:											*/
/********************************************************************/
int	get_para_array(	int*	api_error,			
					FILE*	ah_file,		\
					char*	acz_paratype,	\
					char*	acz_para,		\
					char	acz_value[][LEN]	\
				 )
{
	char	lcz_para_file[LEN];
	char	lcza_para[LEN][LEN];
	int		li_count;
	int		i;

	/*Get local device parameter*/
	/*parameter values*/
	memset(lcza_para,0x00,sizeof(lcza_para));
	
	/*parameter type,name*/
								    
	/*Call the function,get	local device*/				  
	read_para(api_error,		/*type of ERROR*/	    
			  &li_count,		/*number of the	parameters*/
			  lcza_para,		/*the result arry*/	    
			  ah_file,			/*parameter file*/	    
			  acz_paratype,		/*type of the parameter*/   
			  acz_para			/*name of the parameter*/   
			  );						     
								    
	if ( 0 == *api_error )						   
	{							    
		for ( i	= 0; i < li_count; i++)
		strcpy(acz_value[i],lcza_para[i]);
	}
	return ( li_count );
}

/********************************************************************/
/*																	*/
/*	Function Name	:	get_format_time								*/
/*	Description		:	get the	current	time string as format		*/
/*	Progrmmer		:	yiwu										*/
/*	Create Date		:	1 Aug 2002									*/
/*	Last Update		:												*/
/*	Programming Language	: C										*/
/*	compiler		: cc											*/
/*	Memory Model	: small											*/
/*																	*/
/*	Assumptions	: The parameters_file has placed into a	given path.	*/
/*																*/
/*	I/O specification												*/
/*	Input Parameter	:	acz_time_buf	:	addr of	string			*/
/*						size			:	length of the string	*/
/*	Ouput Parameter	:	acz_time_buf	:	value of current time	*/
/*	Library			:	NO											*/
/*	Remarks															*/
/*																	*/
/*	Modification History:											*/
/********************************************************************/

void get_format_time( char* acz_time_buf, size_t size )
{
	time_t	t;

	time( &t );
	strftime( acz_time_buf,	\
			  size,	\
			  "%Y-%m-%d %T", \
			  localtime( &t	)
			);

	return;
}
/*******************************************************************
* 函数名:	OpenSemSet
* 作者:	章旭
* 编写日期:2002.8
* 函数功能:初始化一个信号量的集合
* 输入:	key:信号量的KEY值,
*			sem_count:信号量个数
* 输出:	无
* 返回值:	返回信号量id
* 修改记录(如果有)
* 注意事项:
********************************************************************/
int OpenSemSet(key_t key,int sem_count)
{	/**/
	int li_sid;
	if  (!sem_count)
	{
		return(-1);
	}
	if  ((li_sid = semget(key,sem_count,IPC_CREAT|0660)) ==	-1)
	{
		printf("初始化信号量失败!\n");
		exit(-1);
	}
	else
	{
		return(li_sid);
	}
}

/*******************************************************************
* 函数名:	SetSemVal
* 作者:	章旭
* 编写日期:2002.8
* 函数功能:给指定的信号量设值
* 输入:	ai_sid:信号量标识,ai_sem_index:信号量索引号,ai_value:信号量的值
* 输出:	无
* 返回值:	
* 修改记录(如果有)
* 注意事项:
********************************************************************/
int SetSemVal(int ai_sid,int ai_sem_index,int ai_value)
{
	union semun semopts;
	semopts.val = ai_value;
	return(semctl(ai_sid,ai_sem_index,SETVAL,semopts));
}

/*******************************************************************
* 函数名:	GetSemVal
* 作者:	章旭
* 编写日期:2002.8
* 函数功能:获得信号量的值
* 输入:	ai_sid:信号量标识,ai_sem_index:信号量索引号
* 输出:	无
* 返回值:	返回指定信号量的值
* 修改记录(如果有)
* 注意事项:
*******************************************************************/
int GetSemVal(int ai_sid,int ai_sem_index)
{
	return(semctl(ai_sid,ai_sem_index,GETVAL,0));
}


/********************************************************************
* 函数名	:	f_lock
* 作者		:	genius.xuyong
* 编写日期	:	20 Sep 2002
* 函数功能	:	文件锁
* 输入		:
* 输出		:	无
* 返回值	:	0	:	成功 
* 修改记录	:
* 注意事项	:
********************************************************************/
int	f_lock(char*	acz_lckfile)
{
	int	li_fd =	-1;
	struct flock lck;
	int	li_value = -1;
	char	lcz_file[LEN];

	lck.l_start = 0;
	lck.l_len = 0;
	lck.l_type = F_WRLCK;
	lck.l_whence = SEEK_SET;

	li_fd =	open((char*)acz_lckfile,O_RDWR);
	if (-1 == li_fd)
	{
		printf("open lock_file failed!\n");
		return ( -1 );
	}
	
/** 加锁	**/
	do 
	{
	} while	( -1 ==	fcntl(li_fd,F_SETLKW,&lck));

	close(li_fd);

	return ( 0 );
}

/********************************************************************
* 函数名	:	f_unlock
* 作者		:	genius.xuyong
* 编写日期	:	20 Sep 2002
* 函数功能	:	解除文件锁
* 输入		:
* 输出		:	无
* 返回值	:	0	:	成功 
* 修改记录	:
* 注意事项	:
********************************************************************/
int f_unlock(char*	acz_lckfile)
{
	int	li_fd =	-1;
	struct flock lck;
	int	li_value = -1;
	char	lcz_file[LEN];

	lck.l_start = 0;
	lck.l_len = 0;
	lck.l_type = F_UNLCK;
	lck.l_whence = SEEK_SET;

	li_fd =	open((char*)acz_lckfile,O_RDONLY);
	if (-1 == li_fd)
	{
		printf("open file.lck failed!\n");
		return ( -1 );
	}
/** 加锁	**/
	fcntl(li_fd,F_SETLKW,&lck);
	close(li_fd);
	return ( 0 );
}

/********************************************************************
* 函数名	:	write_unusuality
* 作者		:	genius.xuyong
* 编写日期	:	15 Aug 2002
* 函数功能	:	将未写入消息队列或发送socket未成功的信息写入异常文件
* 输入		:	acz_string	:	信息内容
				ai_len		:	信息长度
* 输出		:	无
* 返回值	:	0	:	写入成功, 
				-1	:	未写入
* 修改记录	:
* 注意事项	:
********************************************************************/
int	write_unusuality(char*	acz_unusualfile,
					char*	acz_lckfile,
					char*	acz_string,
					int	ai_len)
{
	FILE*	pFp;	
	char	lcz_buf[LEN];
	char	lcz_file[LEN];
	FILE*	lh_file;

	
	/**	阻塞模式设置文件锁**/
	f_lock(acz_lckfile);
	
	/**	指定文件打开方式为读操作**/
	if ( NULL != (pFp = fopen((char*)acz_unusualfile,"r") )	)
	{	
		memset(lcz_buf,0x00,sizeof(lcz_buf));
		while( NULL != fgets(lcz_buf,sizeof(lcz_buf),pFp ) )
		{
			if ( memcmp(lcz_buf,acz_string ,ai_len ) )
			{
				continue;
			}
			else
			{
				printf("the same record	is exist\n");
				fflush(	NULL );
			
				fclose(pFp);
			
				/**打开文件锁**/
				f_unlock(acz_lckfile);

				return ( -1 );
			}
		}
	}	
	/**关闭该文件**/
	fclose(pFp);

	/**	追加操作方式打开文件,写入该串**/
	pFp=fopen((char*)acz_unusualfile,"a+");	 
	fwrite(	acz_string, ai_len, 1, pFp );
	fwrite(	"\n", 1, 1, pFp	);
	fclose(pFp);

	f_unlock(acz_lckfile);

	return (0);
}


/********************************************************************
* 函数名	:	error_deal
* 作者		:	genius.xuyong
* 编写日期	:	11 Nov 2002
* 函数功能	:	处理error_type
* 输入		:	ai_error_type	:	错误代码	
* 输出		:	无
* 修改记录	:
* 注意事项	:
********************************************************************/
void	error_deal(int ai_error_type)
{
	FILE*	lh_file;

	lh_file	= fopen("Error_deal_file","w");

	switch (ai_error_type)
	{
		case -6000:
		{
			fwrite("error_type:-6000:消息队列未建立\n",1,31,lh_file);
			break;
		}
		case -6100:
		{
			fwrite("error_type:-6100:cm_ss无参数文件\n",1,32,lh_file);
			break;
		}
		case -6101:
		{
			fwrite("error_type:-6101:cm_ss设备号错误\n",1,32,lh_file);
			break;
		}
		case -6102:
		{
			fwrite("error_type:-6102:cm_ss服务器地址错误\n",1,36,lh_file);
			break;
		}
		case -6103:
		{
			fwrite("error_type:-6103:cm_ss服务器端口错误\n",1,36,lh_file);
			break;
		}
		case -6104:
		{
			fwrite("error_type:-6104:cm_ss测试串时间间隔错误\n",1,40,lh_file);
			break;
		}
		case -6105:
		{
			fwrite("error_type:-6105:cm_ss异常文件名错误\n",1,36,lh_file);
			break;
		}
		case -6106:
		{
			fwrite("error_type:-6105:cm_ss锁文件名错误\n",1,34,lh_file);
			break;
		}
		case -6200:
		{
			fwrite("error_type:-6200:cm_fm无参数文件\n",1,32,lh_file);
			break;
		}
		case -6201:
		{
			fwrite("error_type:-6201:cm_fm设备号错误\n",1,32,lh_file);
			break;
		}
		case -6202:
		{
			fwrite("error_type:-6202:cm_fm采集端口错误\n",1,34,lh_file);
			break;
		}
		case -6203:
		{
			fwrite("error_type:-6203:cm_fm进程错误\n",1,30,lh_file);
			break;
		}
		case -6204:
		{
			fwrite("error_type:-6204:cm_fm时间间隔错误\n",1,34,lh_file);
			break;
		}
		case -6205:
		{
			fwrite("error_type:-6205:cm_fm异常文件名错误\n",1,36,lh_file);
			break;
		}
		case -6206:
		{
			fwrite("error_type:-6205:cm_fm锁文件名错误\n",1,34,lh_file);
			break;
		}
		case -6300:
		{
			fwrite("error_type:-6300:tcp通讯错误\n",1,31,lh_file);
			break;
		}
	}
	fclose(lh_file);
	return ;
}


/* huangliping remark*/
/*
* 函数介绍:记录程序处理过程的日志
* 输入参数:str
* 处理    :将str记录到系统日志中(runningstate.log)
* 输出参数:无
* 返回值  :无
*/
void WriteLogFile(char * str)
{
	FILE * fp;
	fp=OpenFile("../Log/log.dat",fp,"a");
	fputs(str,fp);
	CloseFile(fp);
}

void CloseFile(FILE * fp)
{
	fclose(fp);
}

FILE * OpenFile(char * file_name,FILE * fp,char * opentype)
{
	FILE * fpt;
	int quit_flag=0;
	char log_str[100];
	fp=fopen(file_name,opentype);
	if(strcmp(file_name,"../Log/log.dat")!=0)
	{
		fpt=fopen("../Log/log.dat","a");
	}
	else
	{
		fpt=fp;
	}
	if(fp==NULL)
	{
		printf("Can not Open file stand %s\n",file_name);
		/*准备写入日志*/
		sprintf(log_str,"Can not Open file %s\n",file_name);
		fputs(log_str,fpt);
		quit_flag=1;
	}
	if(quit_flag==1)
	{
		CloseFile(fpt);
		exit(5);
	}
	else
	{
		return fp;
	}
}

⌨️ 快捷键说明

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