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

📄 monitor_s.c

📁 一个UNIX上PROC的小程序
💻 C
字号:
/* Result Sets Interface */#ifndef SQL_CRSR#  define SQL_CRSR  struct sql_cursor  {    unsigned int curocn;    void *ptr1;    void *ptr2;    unsigned int magic;  };  typedef struct sql_cursor sql_cursor;  typedef struct sql_cursor SQL_CURSOR;#endif /* SQL_CRSR *//* Thread Safety */typedef void * sql_context;typedef void * SQL_CONTEXT;/* Object support */struct sqltvn{  unsigned char *tvnvsn;   unsigned short tvnvsnl;   unsigned char *tvnnm;  unsigned short tvnnml;   unsigned char *tvnsnm;  unsigned short tvnsnml;};typedef struct sqltvn sqltvn;struct sqladts{  unsigned int adtvsn;   unsigned short adtmode;   unsigned short adtnum;    sqltvn adttvn[1];       };typedef struct sqladts sqladts;static struct sqladts sqladt = {  1,1,0,};/* Binding to PL/SQL Records */struct sqltdss{  unsigned int tdsvsn;   unsigned short tdsnum;   unsigned char *tdsval[1]; };typedef struct sqltdss sqltdss;static struct sqltdss sqltds ={  1,  0,};/* File name & Package Name */struct sqlcxp{  unsigned short fillen;           char  filnam[12];};static struct sqlcxp sqlfpn ={    11,    "monitor_s.c"};static unsigned int sqlctx = 80267;static struct sqlexd {   unsigned long  sqlvsn;   unsigned int   arrsiz;   unsigned int   iters;   unsigned int   offset;   unsigned short selerr;   unsigned short sqlety;   unsigned int   occurs;            short *cud;   unsigned char  *sqlest;            char  *stmt;   sqladts *sqladtp;   sqltdss *sqltdsp;   unsigned char  **sqphsv;   unsigned long  *sqphsl;            int   *sqphss;            short **sqpind;            int   *sqpins;   unsigned long  *sqparm;   unsigned long  **sqparc;   unsigned short  *sqpadto;   unsigned short  *sqptdso;   unsigned int   sqlcmax;   unsigned int   sqlcmin;   unsigned int   sqlcincr;   unsigned int   sqlctimeout;   unsigned int   sqlcnowait;            int   sqfoff;   unsigned int   sqcmod;   unsigned int   sqfmod;   unsigned char  *sqhstv[4];   unsigned long  sqhstl[4];            int   sqhsts[4];            short *sqindv[4];            int   sqinds[4];   unsigned long  sqharm[4];   unsigned long  *sqharc[4];   unsigned short  sqadto[4];   unsigned short  sqtdso[4];} sqlstm = {12,4};/* SQLLIB Prototypes */extern sqlcxt (/*_ void **, unsigned int *,                   struct sqlexd *, struct sqlcxp * _*/);extern sqlcx2t(/*_ void **, unsigned int *,                   struct sqlexd *, struct sqlcxp * _*/);extern sqlbuft(/*_ void **, char * _*/);extern sqlgs2t(/*_ void **, char * _*/);extern sqlorat(/*_ void **, unsigned int *, void * _*/);/* Forms Interface */static int IAPSUCC = 0;static int IAPFAIL = 1403;static int IAPFTL  = 535;extern void sqliem(/*_ char *, int * _*/);typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;typedef struct { unsigned short len; unsigned char arr[1]; } varchar;/* CUD (Compilation Unit Data) Array */static short sqlcud0[] ={12,4130,850,0,0,5,0,0,1,0,0,27,68,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,10,0,0,1,10,0,0,36,0,0,2,0,0,27,122,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,10,0,0,1,10,0,0,67,0,0,3,0,0,27,123,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,97,0,0,1,10,0,0,98,0,0,4,0,0,30,136,0,0,0,0,0,1,0,113,0,0,5,164,0,4,163,0,0,2,1,0,1,0,2,97,0,0,1,97,0,0,136,0,0,6,0,0,32,208,0,0,0,0,0,1,0,151,0,0,7,0,0,27,259,0,0,4,4,0,2,8,68,66,95,89,90,88,84,49,1,97,0,0,1,97,0,0,1,10,0,0,1,10,0,0,190,0,0,8,0,0,27,260,0,0,4,4,0,2,8,68,66,95,89,90,88,84,49,1,97,0,0,1,97,0,0,1,97,0,0,1,10,0,0,229,0,0,9,0,0,27,279,0,0,4,4,0,3,8,68,66,95,89,90,88,84,50,1,97,0,0,1,97,0,0,1,10,0,0,1,10,0,0,268,0,0,10,0,0,27,280,0,0,4,4,0,3,8,68,66,95,89,90,88,84,50,1,97,0,0,1,97,0,0,1,97,0,0,1,10,0,0,307,0,0,11,0,0,27,303,0,0,4,4,0,4,7,68,66,95,84,74,88,84,1,97,0,0,1,97,0,0,1,10,0,0,1,10,0,0,345,0,0,12,0,0,27,304,0,0,4,4,0,4,7,68,66,95,84,74,88,84,1,97,0,0,1,97,0,0,1,97,0,0,1,10,0,0,383,0,0,13,145,0,4,342,0,0,2,1,0,4,7,68,66,95,84,74,88,84,2,97,0,0,1,97,0,0,413,0,0,14,0,0,30,406,0,0,0,0,0,2,8,68,66,95,89,90,88,84,49,436,0,0,15,0,0,30,407,0,0,0,0,0,3,8,68,66,95,89,90,88,84,50,459,0,0,16,0,0,30,409,0,0,0,0,0,4,7,68,66,95,84,74,88,84,};#include <sqlda.h>#include <sys/stat.h>#include <stdio.h>#include <fcntl.h>#include <signal.h>#include <unistd.h>#include <stdlib.h>#include <malloc.h>#include <string.h>#include <sqlcpr.h>//#include <atmi.h>//#include <fml.h>//#include <userlog.h>/* set pro*c operation */exec sql include sqlca;exec sql include oraca;exec oracle option (oraca=yes);/* Define constants for VARCHAR lengths. */#define UNAME_LEN 20#define PWD_LEN 40////////////////////////////////////////////////////////////////////////////////////////////////////#define	MAX_BUFF_LEN 1024#define MAX_RECE_LEN 512#define RUNNING_DIR      "./tmp"#define LOCK_FILE        "monitor.lock"#define LOG_FILE         "monitor.log"void log_message(char *filename,char *message){		FILE *logfile;    logfile=fopen(filename,"a");    if(!logfile) return;    fprintf(logfile,"%s\n",message);    fclose(logfile);}void signal_handler(int sig){    switch(sig)     {	    case SIGHUP:	            log_message(LOG_FILE,"hangup signal catched");	            break;	    case SIGTERM:	            log_message(LOG_FILE,"terminate signal catched");	            exit(0);	            break;    }}void daemonize(){		int i,lfp;		char str[10];		    if(getppid()==1) return; /* already a daemon */    	    i=fork();    if (i<0) exit(1); /* fork error */    if (i>0) exit(0); /* parent exits */    	    /* child (daemon) continues */    setsid(); /* obtain a new process group */    for (i=getdtablesize();i>=0;--i) close(i); /* close all descriptors */    i=open("/dev/null",O_RDWR); dup(i); dup(i); /* handle standart I/O */    umask(027); /* set newly created file permissions */        chdir(RUNNING_DIR); /* change running directory */    lfp=open(LOCK_FILE,O_RDWR|O_CREAT,0640);    if (lfp<0) exit(1); /* can not open */    if (lockf(lfp,F_TLOCK,0)<0) exit(0); /* can not lock */    	    /* first instance continues */    sprintf(str,"%d\n",getpid());    write(lfp,str,strlen(str)); /* record pid to lockfile */    signal(SIGCHLD,SIG_IGN); /* ignore child */    signal(SIGTSTP,SIG_IGN); /* ignore tty signals */    signal(SIGTTOU,SIG_IGN);    signal(SIGTTIN,SIG_IGN);    signal(SIGHUP,signal_handler); /* catch hangup signal */    signal(SIGTERM,signal_handler); /* catch kill signal */}/************************************************************************************************//*函数名称:	readcfg																							*//*功能描述:	读取配置文件																				*//*调用模块:																											*//*参数说明:	arg:cfgname-配置文件名(含路径)											*//*						arg:section-节点名称  															*//*						arg:key    -键名		  															*//*						arg:value  -键值		  															*//*返 回 值:	1: success	<0: failure	( -1,-2,-3,-4)							*//*		   Create.																									*//************************************************************************************************/int readcfg(char *cfgname,char *section,char *key,char *value){ 	FILE *cfgfile; 	char buff[200]; 	char section_ext[200]; 	char key_value[200]; 	int find=0; 	char value_ext[200];	memset(buff,0,sizeof(buff)); 		memset(section_ext,0,sizeof(section_ext)); 		memset(key_value,0,sizeof(key_value)); 		memset(value_ext,0,sizeof(value_ext)); 	 	if((cfgfile=fopen(cfgname,"r"))==NULL) return -1;     	/*查找section*/ 	sprintf(section_ext,"[%s]",section); 	for(;fgets(buff,sizeof(buff),cfgfile);){    		if(buff[0]=='#') continue;    		if(buff[0]!='[') continue;        		if(strstr(buff,section_ext)==NULL)     			continue;    		else{       			find=1;       			break;      		}   	}   	if(find==0){    		fclose(cfgfile);    		return -2;   	} 	/*查找key=value*/ 	value_ext[0]=0; 	find=0; 	for(;fgets(buff,sizeof(buff),cfgfile);){    		if(buff[0]=='[') continue;    		if(buff[0]=='#') continue;    		if(strstr(buff,key)==NULL)      			continue;    		else{       			sprintf(key_value,"%s=%%s\n",key);       			sscanf(buff,key_value,value_ext);       			/*printf("buff[%s]key[%s]value_ext[%s]\n",buff,key_value,value_ext);*/       			find=1;       			break;      		}   	}  	fclose(cfgfile);   	  	if(find==0) return -3;  	if(value_ext[0]==0)   		return -4; 	else{    		strcpy(value,value_ext);    		return 1;   	} }void Rtrim(char *pFieldName){        int i;        for (i=strlen(pFieldName)-1;i>0;i--){                if (pFieldName[i]==' ') continue;                else break;        }        pFieldName[i+1]='\0';}/************************************************************************************************//*函数名称:	ConnectDB									*//*功能描述:	读取配置文件,按业务区选择连接的数据库,成功返回 0, 失败返回 -1		*//*调用模块:											*//*参数说明:	arg1:host-业务区代码,  arg2:username-登录用户名,  arg3: iftest--为0时连测试机	*//*返 回 值:	0: success	!0: failure							*//*		   Create.									*//************************************************************************************************/int ConnectDB(char * tnsname,char *username,char *password,int iftest){	char key[15];	char *conn_home;	char gsHomeDir[100];	memset(tnsname, 0,sizeof(tnsname));	memset(username, 0,sizeof(username));	memset(password, 0,sizeof(password));	memset(gsHomeDir, 0,sizeof(gsHomeDir));	memset(key, 0,sizeof(key));	memset(tnsname, 0,sizeof(tnsname));	/*读配置文件路径*///	conn_home= getenv("HOME");//	if (conn_home==NULL) {//		printf("Error in PubConn:Error read env HOME !\n");//		exit(1);//	}	sprintf(gsHomeDir,"./config.cfg");	/*printf("gsHomeDir=%s.\n",gsHomeDir);*/	/*连接主机*/	if ( iftest )	{			sprintf(key, "yzxt2%s", username);	}	else	sprintf(key, "KF20");	/*printf("key=[%s]\n",key);*/	if (readcfg(gsHomeDir, key, "PASSWORD", password) == -2)	{		printf("Error in monitor_s.c:Can not find password %s in %s file!\n",key,gsHomeDir);		fflush(0);		return -1;	}	/*printf("uname=[%s]pswd[%s]\n",username,password);*/	if ( readcfg(gsHomeDir, key, "USER", username) <0 )	{		printf("Error in monitor_s.c:Can not find username %s in %s file!\n",key,gsHomeDir);		fflush(0);		return -1;	}	/* EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbchains; */ 	{      struct sqlexd sqlstm;      sqlstm.sqlvsn = 12;      sqlstm.arrsiz = 4;      sqlstm.sqladtp = &sqladt;      sqlstm.sqltdsp = &sqltds;      sqlstm.iters = (unsigned int  )10;      sqlstm.offset = (unsigned int  )67;      sqlstm.cud = sqlcud0;      sqlstm.sqlest = (unsigned char  *)&sqlca;      sqlstm.sqlety = (unsigned short)256;      sqlstm.occurs = (unsigned int  )0;      sqlstm.sqhstv[0] = (unsigned char  *)username;      sqlstm.sqhstl[0] = (unsigned long )0;      sqlstm.sqhsts[0] = (         int  )0;      sqlstm.sqindv[0] = (         short *)0;      sqlstm.sqinds[0] = (         int  )0;      sqlstm.sqharm[0] = (unsigned long )0;      sqlstm.sqadto[0] = (unsigned short )0;      sqlstm.sqtdso[0] = (unsigned short )0;      sqlstm.sqhstv[1] = (unsigned char  *)password;      sqlstm.sqhstl[1] = (unsigned long )40;      sqlstm.sqhsts[1] = (         int  )40;      sqlstm.sqindv[1] = (         short *)0;      sqlstm.sqinds[1] = (         int  )0;      sqlstm.sqharm[1] = (unsigned long )0;      sqlstm.sqadto[1] = (unsigned short )0;      sqlstm.sqtdso[1] = (unsigned short )0;      sqlstm.sqhstv[2] = (unsigned char  *)key;      sqlstm.sqhstl[2] = (unsigned long )20;      sqlstm.sqhsts[2] = (         int  )20;      sqlstm.sqindv[2] = (         short *)0;      sqlstm.sqinds[2] = (         int  )0;      sqlstm.sqharm[2] = (unsigned long )0;      sqlstm.sqadto[2] = (unsigned short )0;      sqlstm.sqtdso[2] = (unsigned short )0;      sqlstm.sqphsv = sqlstm.sqhstv;      sqlstm.sqphsl = sqlstm.sqhstl;      sqlstm.sqphss = sqlstm.sqhsts;      sqlstm.sqpind = sqlstm.sqindv;      sqlstm.sqpins = sqlstm.sqinds;      sqlstm.sqparm = sqlstm.sqharm;      sqlstm.sqparc = sqlstm.sqharc;      sqlstm.sqpadto = sqlstm.sqadto;      sqlstm.sqptdso = sqlstm.sqtdso;      sqlstm.sqlcmax = (unsigned int )100;      sqlstm.sqlcmin = (unsigned int )2;      sqlstm.sqlcincr = (unsigned int )1;      sqlstm.sqlctimeout = (unsigned int )0;      sqlstm.sqlcnowait = (unsigned int )0;      sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);	}	if(sqlca.sqlcode!=0) {		printf("Error in monitor_s.c:连接数据库服务器%s失败sqlcode[%ld]\n",key,sqlca.sqlcode);		fflush(0);		return -1;	}	return 0 ;}/*断开数据库连接.(调用ConnectDB或ContactDB后使用)*/void DisconnectDB(){	/* EXEC SQL COMMIT WORK RELEASE; */  struct sqlexd sqlstm; sqlstm.sqlvsn = 12; sqlstm.arrsiz = 4; sqlstm.sqladtp = &sqladt; sqlstm.sqltdsp = &sqltds; sqlstm.iters = (unsigned int  )1; sqlstm.offset = (unsigned int  )98; sqlstm.cud = sqlcud0; sqlstm.sqlest = (unsigned char  *)&sqlca; sqlstm.sqlety = (unsigned short)256; sqlstm.occurs = (unsigned int  )0; sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);}    EXEC SQL BEGIN DECLARE SECTION ;		char v_sysdate[15];		EXEC SQL END DECLARE SECTION ;main(){   // daemonize();    printf("test string \n");    char file_name[128];        if ( ConnectDB("KF20","kf","kf123",1) )    {			printf("CONNECT ERROR!\n");			exit(0);		}				EXEC SQL SELECT to_char(sysdate,'yyyymmddhh24miss') INTO :v_sysdate FROM dual;		sprintf( file_name, "%s%s","Test",v_sysdate);		DisconnectDB();		printf("%s\n",file_name);}bool frame_analyse(char *pFrame){	char pBuff[255]={0};	strcpy(pBuff,pFrame);		bool iret=false;				return iret;	}int  process(int fd){	int iret=0;	char buff[MAX_BUFF_LEN];	int received;	int help,read_bytes;		received = MAX_RECE_LEN;	memset ( buff, '.', received );	read_bytes = read(fd, buff, received);	if (read_bytes < 0) 	{		perror("read");		return -1;	}	printf("%d bytes have received on socket %d\n", read_bytes, fd);	printf("buff=\n%s\n", buff);	for(help=0; help<received; help++)	if(buff[help] != '0'+help%10) 	{		printf("Error on position %d\n", help); 		break;	}	return iret;}

⌨️ 快捷键说明

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