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

📄 db.c

📁 接收端的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include	<stdio.h> 	#include	<mysql.h>#include	<sys/socket.h>#include	<sys/types.h>#include	<netinet/in.h>#include	<errmsg.h>#include	<mysqld_error.h>#include	<string.h>#include	<stdlib.h>#include	<signal.h>	#include	<pthread.h>#include	"devicelog.h"#include	"db.h"#include	"queue.h"#include	"logging.h"	#ifndef MYSQL_VERSION_ID  /*below the mysql server 3.22.34 ,use the mysql_field_count */#define mysql_field_count    mysql_num_fields#endif#if MYSQL_VERSION_ID > 32224#define mysql_field_count mysql_num_fields#endifextern int sem;  	//信号量,用于与服务器消息接收线程通信extern pthread_cond_t ndone_cond;		//条件变量,用于与服务器消息接收线程通信extern pthread_mutex_t ndone_mutex;		//互斥锁,用于与服务器消息接收线程通信extern LinkQueue *Q;#define filename "/.itworks.conf" 			//mysql的客户端需要的连接参数,包括用户名,密码等char hostname[16],username[16],password[16],dbname[10];		//用来存储连接数据库的参数:主机名,用户名,密码,数据库名char severity_level[2];							//定义紧急时间处理级别char mail_server[16];							 //定义邮件服务器地址char from_addr[64];MYSQL *conn=NULL;								//定义MYSQL的连接句柄	/****************************************************************************************************************				函数功能: 初始化mysql客户端所需的各种参数****************************************************************************************************************/void initparameters(void)				{        char string[20];        FILE *fp=NULL;        int i=0,j=0;        char ch;                   fp=fopen(filename,"r");                                                                                        if(!fp)        {                                log_fatal("InitDBparameters","ERROR: Can not open the mysql config file!");                exit(1);        }        do        {                                                                                                memset(string,0,20);		 		 ch=fgetc(fp);                while(ch!='\n'&&ch!=EOF)                {                                                                                                        string[i]=ch;                        ch=fgetc(fp);                        i++;                }                string[i]='\0';        		switch(string[1])      		    {             	   case 'h':                        j=strcspn(string,"=");j++;                        //printf("the host name is:%s\n",string+j);                        memset(hostname,0,16);                        strncpy(hostname,string+j,strlen(string+j));                        hostname[strlen(string+j)]='\0';                        break;            	   case 'u':                        j=strcspn(string,"=");j++;                        //printf("the user name is :%s\n",string+j);						memset(username,0,16);						strncpy(username,string+j,strlen(string+j));						username[strlen(string+j)]='\0';                        break;              	  case 'p':           	             j=strcspn(string,"=");j++;						// printf("the password is :%s\n",string+j);						memset(password,0,16);						strncpy(password,string+j,strlen(string+j));						password[strlen(string+j)]='\0';                        break;                  case 'd':                       j=strcspn(string,"="); j++;					//	printf("the password is :%s\n",string+j);						memset(dbname,0,10);						strncpy(dbname,string+j,strlen(string+j));						dbname[strlen(string+j)]='\0';						break;					      		     case 's':						j=strcspn(string,"="); j++;					//	printf("the password is :%s\n",string+j);						memset(severity_level,0,sizeof(severity_level));						strncpy(severity_level,string+j,strlen(string+j));						severity_level[strlen(string+j)]='\0';											break;				      		    case 'm':      		    		j=strcspn(string,"="); j++;					//	printf("the password is :%s\n",string+j);						memset(mail_server,0,sizeof(mail_server));						strncpy(mail_server,string+j,strlen(string+j)); 						mail_server[strlen(string+j)]='\0';						break;      		    case 'f':      		    		j=strcspn(string,"="); j++;					//	printf("the password is :%s\n",string+j);						memset(from_addr,0,sizeof(from_addr));						strncpy(from_addr,string+j,strlen(string+j)); 						from_addr[strlen(string+j)]='\0';						break;      		     default:						break;      		  }                i=0;        }while(ch!=EOF);        fclose(fp);                      log_debug("HOSTNAME",hostname);        log_debug("USERNAME",username);        log_debug("PASSWORD",password);        log_debug("DBNAME",dbname);        log_debug("MAILSERVER",mail_server);        log_debug("SEVERITY_LEVEL",severity_level);        log_debug("FROM_ADDR",from_addr);        log_info("DB","The parameters has initialized!");}				/******************************************************************************************************			函数功能: 处理select语句的查询			@ conn: 与MYSQL的连接指针			@ selectquery: 查询语句			@ result:  查询结果*******************************************************************************************************/void process_select_query(MYSQL *conn,char *selectquery,char *result){	MYSQL_RES *res;	MYSQL_ROW rows;		if(mysql_real_query(conn,selectquery,strlen(selectquery))!=0)	{		log_warn("DB","error in select query!");		log_debug("DB",selectquery);		log_warn("DB",(char *)mysql_error(conn));				if(CR_SERVER_LOST == mysql_errno(conn))		//与服务器失去连接,重新发起连接			conn=doconnect();			return ;	}	res=mysql_store_result(conn);		rows=mysql_fetch_row(res);	if(rows!=NULL)		strcpy(result,rows[0]);  			//将查询结果保存在result中	else		strcpy(result,"Unknown");			//没有记录则将result置于“Unknown”	}/*********************************************************************************************************		函数功能: 处理有返回结果的查询,并将结果全部打印***********************************************************************************************************/			void process_result_set(MYSQL_RES *res)		{	int colCount=0,j=0;	MYSQL_ROW row;	colCount=(int) mysql_num_fields(res);	while((row=mysql_fetch_row(res))!=NULL)	{		for(j=0;j<colCount;j++)		{			log_debug("DB",row[j]);					}					}		} /*end of process_result_set*//*******************************************************************************************************************     			函数功能:处理查询,主要处理了不返回结果的查询,如insert语句,和返回结果的查询,如select语句     			     			@ conn: MYSQL的连接指针     			@ query: sql查询语句********************************************************************************************************************/void process_query(MYSQL *conn,char * query)    {	MYSQL_RES *res;	if(mysql_real_query(conn,query,strlen(query))!=0)	{		log_warn("DB","error in query!");		log_debug("DB",query);		log_warn("DB",(char *)mysql_error(conn));		if(CR_SERVER_LOST == mysql_errno(conn))		//与服务器失去连接,重新发起连接		conn=doconnect();			return ;	}	else	{		res=mysql_store_result(conn);		if(res==NULL)		{			if(mysql_field_count(conn)>0)/*an error in store the result*/			{				log_warn("DB","there are some problem in store the result\n");				return ;			}			else   /*the query has no return result*/			{				log_info("DB","One info insert into database!");			}		}		else		{			process_result_set(res);			mysql_free_result(res);		}			}}/*end of process_query*/	/******************************************************************************************************************							函数功能: 于mysql服务器建立连接******************************************************************************************************************/MYSQL * doconnect(){	MYSQL * conn;		conn=mysql_init(NULL); 	if(conn==NULL)	{		log_error("DB","Connect init error!");		log_error("DB",(char *)mysql_error(conn));		return NULL;	}	  		if(mysql_real_connect(conn,hostname,											username,													password,													dbname,														0,				NULL,				0				)==NULL)	{		log_error("DB","can't connect to the mysql server !");		return NULL;	}		log_info("DB","Connect to the mysql server!");		return conn;}void reconfig(){		if(conn != NULL)	{		disconnect(conn);			}			initparameters();	conn=doconnect();		return ;}/*********************************************************************************************************************				函数功能: 关闭与mysql服务器的连接								@ conn : 与MYSQL服务器的连接指针********************************************************************************************************************/void disconnect(MYSQL * conn){	mysql_close(conn);	conn=NULL;		log_info("DB","Disconnect to the mysql server!");	//	printf("close the connection to the mysql server!\n");}								void sendmail_write(const int sock,const char *str, const char *arg){	char buf[4096];	memset(buf,0,sizeof(buf));	if(arg!=NULL)		snprintf(buf,sizeof(buf),str,arg);	else		snprintf(buf,sizeof(buf),str);	send(sock,buf,strlen(buf),0);	}int sendmail(const char *from, const char *to, const char *subject,const char *body,			const char *hostname,const int port){	struct sockaddr_in server_addr;	int sock=0;		sock=socket(AF_INET,SOCK_STREAM,0);	bzero(&server_addr,sizeof(server_addr));	server_addr.sin_family=AF_INET;	server_addr.sin_port=htons(port);	inet_aton(hostname,server_addr.sin_addr);	if(connect(sock,(struct sockaddr *)&server_addr,sizeof(server_addr))<0)	{

⌨️ 快捷键说明

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