📄 sp_file.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[11];};static const struct sqlcxp sqlfpn ={ 10, "sp_file.pc"};static unsigned int sqlctx = 84131;static struct sqlexd { unsigned long sqlvsn; unsigned int arrsiz; unsigned int iters; unsigned int offset; unsigned short selerr; unsigned short sqlety; unsigned int occurs; const short *cud; unsigned char *sqlest; const 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 void sqlcxt (void **, unsigned int *, struct sqlexd *, const struct sqlcxp *);extern void sqlcx2t(void **, unsigned int *, struct sqlexd *, const struct sqlcxp *);extern void sqlbuft(void **, char *);extern void sqlgs2t(void **, char *);extern void sqlorat(void **, unsigned int *, void *);/* Forms Interface */static const int IAPSUCC = 0;static const int IAPFAIL = 1403;static const int IAPFTL = 535;extern void sqliem(char *, int *); static const char *sq0003 = "select a.device_number ,decode(b.status_code,'101','1','0') ,decode(b.statu\s_code,'101','开机','停机') from info_corporation a ,info_local b where ((a.\flag='0' and a.user_no=b.user_no) and b.flag='0') ";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 const short sqlcud0[] ={12,4274,852,0,0,5,0,0,1,0,0,539,96,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,97,0,0,1,10,0,0,36,0,0,2,63,0,516,98,0,0,1,0,0,1,0,2,97,0,0,55,0,0,3,212,0,521,119,0,0,0,0,0,1,0,70,0,0,3,0,0,525,125,0,0,3,0,0,1,0,2,97,0,0,2,97,0,0,2,97,0,0,97,0,0,3,0,0,527,142,0,0,0,0,0,1,0,112,0,0,4,0,0,544,163,0,0,0,0,0,1,0,};#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sqlca.h>#include <oraca.h>#include <signal.h>#include "sp_file.h"#include "util.h"#include "acct_util.h"#define TMP_SP_FILE_PATH "../tmp_file/"#define SP_FILE_PATH "../sp_file/"int fileAttr = 0;char connStr[32];void main(int argc, char** argv){ int ret; int pid; char gs_local_net[7]; int li_ret; memset(connStr,0x00,sizeof(connStr)); if(argc != 3){ printf("用法:命令 文件属性(1掌上股市 数据库链接串\n"); return; } fileAttr = atoi(argv[1]); strcpy(connStr,argv[2]); strcpy(gs_local_net,"831"); li_ret = init_sqlca_info(connStr,gs_local_net); if(li_ret != 0) { printf("以公共用户登录数据库,初始化全局变量出错!"); return; } pid = fork(); if(pid == -1){ printf("创建企业新时空进程错误!\n"); exit(-1); } if(pid > 0) exit(0); pid = setsid(); if(pid == -1){ printf("改变企业新时空进程属性错误!\n"); exit(-1); } /*设置UNIX下的信号无效*/ signal(SIGINT, SIG_IGN); signal(SIGTERM, SIG_IGN); signal(SIGQUIT, SIG_IGN); signal(SIGCLD, SIG_IGN); if(fileAttr == 1) xsk_file(); else printf("文件属性参数无效\n"); return;}/*企业新时空*/void xsk_file(){ int ret; char totalRecord[20]; char fileDateTime[15]; char fileName[128]; char command[32]; char deviceNumber[65]; char status_code[6]; char remarks[20]; int record_seri =0; FILE *fd = NULL; memset(command,0x00,sizeof(command)); memset(fileDateTime,0x00,sizeof(fileDateTime)); memset(fileName,0x00,sizeof(fileName)); /* EXEC SQL WHENEVER SQLERROR DO sql_error("function:dinner_send"); */ /* EXEC SQL CONNECT :sqlca_ib.log_id IDENTIFIED BY :sqlca_ib.log_pass USING :sqlca_ib.serv_name; */ { struct sqlexd sqlstm; sqlorat((void **)0, &sqlctx, &oraca); sqlstm.sqlvsn = 12; sqlstm.arrsiz = 4; sqlstm.sqladtp = &sqladt; sqlstm.sqltdsp = &sqltds; sqlstm.iters = (unsigned int )10; sqlstm.offset = (unsigned int )5; sqlstm.cud = sqlcud0; sqlstm.sqlest = (unsigned char *)&sqlca; sqlstm.sqlety = (unsigned short)256; sqlstm.occurs = (unsigned int )0; sqlstm.sqhstv[0] = (unsigned char *)(sqlca_ib.log_id); sqlstm.sqhstl[0] = (unsigned long )31; sqlstm.sqhsts[0] = ( int )31; 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 *)(sqlca_ib.log_pass); sqlstm.sqhstl[1] = (unsigned long )31; sqlstm.sqhsts[1] = ( int )31; 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 *)(sqlca_ib.serv_name); sqlstm.sqhstl[2] = (unsigned long )31; sqlstm.sqhsts[2] = ( int )31; 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) sql_error("function:dinner_send");} /* EXEC SQL SELECT TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') INTO :fileDateTime FROM DUAL; */ { struct sqlexd sqlstm; sqlorat((void **)0, &sqlctx, &oraca); sqlstm.sqlvsn = 12; sqlstm.arrsiz = 4; sqlstm.sqladtp = &sqladt; sqlstm.sqltdsp = &sqltds; sqlstm.stmt = "select TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') into :b0 from \DUAL "; sqlstm.iters = (unsigned int )1; sqlstm.offset = (unsigned int )36; sqlstm.selerr = (unsigned short)1; sqlstm.cud = sqlcud0; sqlstm.sqlest = (unsigned char *)&sqlca; sqlstm.sqlety = (unsigned short)256; sqlstm.occurs = (unsigned int )0; sqlstm.sqhstv[0] = (unsigned char *)fileDateTime; sqlstm.sqhstl[0] = (unsigned long )15; 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.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; sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn); if (sqlca.sqlcode < 0) sql_error("function:dinner_send");} PackString(fileDateTime); sprintf(fileName,"%sNCF-%s.req",TMP_SP_FILE_PATH,fileDateTime); PackString(fileName); if((fd = fopen(fileName,"a")) == NULL){ printf("open file error\n"); return; } /*EXEC SQL DECLARE cur_smg_sp CURSOR for select device_number,decode(status_code,'101','1','0'),decode(status_code,'101','开机','停机') from info_busi where device_number like '89234%' and flag = '0' and tele_type = 'LOCAL';*/ /* EXEC SQL DECLARE cur_smg_sp CURSOR for select a.device_number,decode(b.status_code,'101','1','0'),decode(b.status_code,'101','开机','停机') from info_corporation a,info_local b where a.flag = '0' and a.user_no = b.user_no and b.flag = '0'; */ /* EXEC SQL OPEN cur_smg_sp; */ { struct sqlexd sqlstm; sqlorat((void **)0, &sqlctx, &oraca); sqlstm.sqlvsn = 12; sqlstm.arrsiz = 4; sqlstm.sqladtp = &sqladt; sqlstm.sqltdsp = &sqltds; sqlstm.stmt = sq0003; sqlstm.iters = (unsigned int )1; sqlstm.offset = (unsigned int )55; sqlstm.selerr = (unsigned short)1; sqlstm.cud = sqlcud0; sqlstm.sqlest = (unsigned char *)&sqlca; sqlstm.sqlety = (unsigned short)256; sqlstm.occurs = (unsigned int )0; sqlstm.sqcmod = (unsigned int )0; sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn); if (sqlca.sqlcode < 0) sql_error("function:dinner_send");} while(1){ memset(deviceNumber,0x00,sizeof(deviceNumber)); memset(status_code,0x00,sizeof(status_code)); memset(remarks,0x00,sizeof(remarks)); /* EXEC SQL FETCH cur_smg_sp INTO :deviceNumber, :status_code, :remarks; */ { struct sqlexd sqlstm; sqlorat((void **)0, &sqlctx, &oraca); sqlstm.sqlvsn = 12; sqlstm.arrsiz = 4; sqlstm.sqladtp = &sqladt; sqlstm.sqltdsp = &sqltds; sqlstm.iters = (unsigned int )1; sqlstm.offset = (unsigned int )70; sqlstm.selerr = (unsigned short)1; sqlstm.cud = sqlcud0; sqlstm.sqlest = (unsigned char *)&sqlca; sqlstm.sqlety = (unsigned short)256; sqlstm.occurs = (unsigned int )0; sqlstm.sqfoff = ( int )0; sqlstm.sqfmod = (unsigned int )2; sqlstm.sqhstv[0] = (unsigned char *)deviceNumber; sqlstm.sqhstl[0] = (unsigned long )65; 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 *)status_code; sqlstm.sqhstl[1] = (unsigned long )6; sqlstm.sqhsts[1] = ( int )0; 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 *)remarks; sqlstm.sqhstl[2] = (unsigned long )20; sqlstm.sqhsts[2] = ( int )0; 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; sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn); if (sqlca.sqlcode < 0) sql_error("function:dinner_send");} if(sqlca.sqlcode == 1403) break; record_seri++; PackString(deviceNumber); PackString(status_code); PackString(remarks); fprintf(fd,"%d|%s|%s|%s|%s|\n", record_seri,deviceNumber,status_code,fileDateTime,remarks); fflush(fd); } /* EXEC SQL CLOSE cur_smg_sp; */ { struct sqlexd sqlstm; sqlorat((void **)0, &sqlctx, &oraca); sqlstm.sqlvsn = 12; sqlstm.arrsiz = 4; sqlstm.sqladtp = &sqladt; sqlstm.sqltdsp = &sqltds; sqlstm.iters = (unsigned int )1; sqlstm.offset = (unsigned int )97; sqlstm.cud = sqlcud0; sqlstm.sqlest = (unsigned char *)&sqlca; sqlstm.sqlety = (unsigned short)256; sqlstm.occurs = (unsigned int )0; sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn); if (sqlca.sqlcode < 0) sql_error("function:dinner_send");} fprintf(fd,"%s\n","END"); fflush(fd); fclose(fd); WriteLog(" 创建企业新时空文件 success\n"); sprintf(command,"mv %s/*.* %s/",TMP_SP_FILE_PATH,SP_FILE_PATH); system(command); return; }void sql_error(char *msg){ /* EXEC SQL WHENEVER SQLERROR CONTINUE; */ printf("%s:%s\n",msg,sqlca.sqlerrm.sqlerrmc); /* EXEC SQL ROLLBACK RELEASE; */ { struct sqlexd sqlstm; sqlorat((void **)0, &sqlctx, &oraca); sqlstm.sqlvsn = 12; sqlstm.arrsiz = 4; sqlstm.sqladtp = &sqladt; sqlstm.sqltdsp = &sqltds; sqlstm.iters = (unsigned int )1; sqlstm.offset = (unsigned int )112; sqlstm.cud = sqlcud0; sqlstm.sqlest = (unsigned char *)&sqlca; sqlstm.sqlety = (unsigned short)256; sqlstm.occurs = (unsigned int )0; sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);} exit(1);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -