?? monitor_s.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 + -