亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? audcreindex.cpp

?? 查重
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
 *     文件名: checkDup.cpp
 *
 *    版權所有 (C) 2002 神州數碼(中國)有限公司
 *
 *        描述:稽核查重主程序
 *
 *        作者:戴大剛
 *
 *    創建日期:2006-03-14
 *
 *        版本:ver1.0
 *
 *    參考文檔:
 *
 *    修訂記錄:
 *    修訂日期    修訂人    修訂內容
 *                                               
 *                           
 */

// 該模版適合于所有預處理,標準批價,查重,入庫,下發處理等模塊
// 該類模塊特點是輸出,輸入文件一一對應
// 該類模版并不適合上發,分揀
// 在需要程序數據一致性的地方如查重需要編寫redo,beginTran,commitTran函數

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <unistd.h>
#include <fcntl.h>
#include <malloc.h>
#include <dirent.h>
#include <sys/stat.h>
#include <stdarg.h>

/* 引用公共函數申明的頭文件 */
#include "public.h"

/* 引用查重程序相關類型定義  */
#include "audCreIndex.h"

/* 儲存已經初始化的索引文件名                         */
/* 在處理一個話單文件結束后需要重新刷新這些文件       */
/* 索引文件最大128天,應該已經足夠                    */

typeIndexName  pIndexName[1280];
int  totalIndexFiles;

/* 定義程序運行必選參數 */
char inputPath[128+1];          // 輸入路徑
char filePattern[128+1];        // 輸入文件匹配條件
char outputPath[128+1];         // 輸出路徑
char tmpPath[128+1];            // 臨時路徑
char logPath[128+1];            // 日志路徑
char indexPath[128+1];          // 日志路徑
char bakPath[128+1];            // 備份路徑
char errorPath[128+1];          // 錯誤路徑
char staticPath[128+1];         // 靜態數據路徑
char idxNamePrefix[12+1];       // 索引文件名前綴
char procID[2+1];               // 進程序號
int  runFlag;                   // 程序運行方式
int  sleepTime;                 // 沒有文件處理時程序睡眠時間
char orgfileName[128+1];
/* runFlag 定義: 為 1 ,備份文件,守護進程運行       */
/* runFlag 定義: 為 2 ,不備份文件,非守護進程運行   */
/* runFlag 定義: 為 3 ,不備份文件,守護進程運行     */
/* runFlag 定義: 其他 ,備份文件,非守護進程運行     */
/* 下面定義應用程序需要的特殊運行參數                 */
/* 針對每一個應用程序都會不同                         */

char errMsg[128+1];             // 全局的出錯信息,用于描述拋出的異常
typeLogBuf    pLogBuf;          // 日志輸出相關參數

typedef struct{
char origenName[24+1];             //原始清單文件名
int  totalNum;                     //總話單數
int  curNum;                       //成功話單數 
}typeChkDupLogBuf;
/* 記錄對應于原始清單日志                            */
typeChkDupLogBuf pLogCkDpBuf[1024];
int    totalLogBuf;

/* 根據應用程序需要從配置文件里讀取相關參數 */ 
int readCfgFile(char * programName,typeCfgParam * pCfgParam)
{
char buf[128+1];
char tmpChar[56+1];

programName[strlen(programName)-4]='\0'; //去除.cfg后綴
if(strstr(programName,"audCreMobIdx")==NULL && strstr(programName,"audCreNetIdx")==NULL)
{
	printf("Cfg file is error! please check it!\n");
	return -1;
}

memset(tmpChar,0,sizeof(tmpChar));
if(strncmp(programName,"../cfg/",7)==0)
{
	memcpy(tmpChar,&programName[7],strlen(programName)-7);
}
else
{
	memcpy(tmpChar,programName,strlen(programName));
}

memset(buf,0,sizeof(buf));
sprintf(buf,"%s.%s",tmpChar,"inputPath");				
memset(inputPath,0,sizeof(inputPath));
if( readCfgParam(inputPath,buf,pCfgParam)<0)   return -1;	

memset(buf,0,sizeof(buf));
sprintf(buf,"%s.%s",tmpChar,"filePattern");					
memset(filePattern,0,sizeof(filePattern));	
if( readCfgParam(filePattern,buf,pCfgParam)<0)     return -1;

memset(buf,0,sizeof(buf));
sprintf(buf,"%s.%s",tmpChar,"outputPath");
memset(outputPath,0,sizeof(outputPath));	
if( readCfgParam(outputPath,buf,pCfgParam)<0) return -1;

memset(buf,0,sizeof(buf));
sprintf(buf,"%s.%s",tmpChar,"tmpPath");	
memset(tmpPath,0,sizeof(tmpPath));	
if( readCfgParam(tmpPath,buf,pCfgParam)<0)       return -1;

memset(buf,0,sizeof(buf));
sprintf(buf,"%s.%s",tmpChar,"logPath");	
memset(logPath,0,sizeof(logPath));	
if( readCfgParam(logPath,buf,pCfgParam)<0)       return -1;

memset(buf,0,sizeof(buf));
sprintf(buf,"%s.%s",tmpChar,"bakPath");
memset(bakPath,0,sizeof(bakPath));	
if( readCfgParam(bakPath,buf,pCfgParam)<0)       return -1;

memset(buf,0,sizeof(buf));
sprintf(buf,"%s.%s",tmpChar,"errorPath");
memset(errorPath,0,sizeof(errorPath));	
if( readCfgParam(errorPath,buf,pCfgParam)<0)   return -1;

memset(buf,0,sizeof(buf));
sprintf(buf,"%s.%s",tmpChar,"indexPath");
memset(indexPath,0,sizeof(indexPath));	
if( readCfgParam(indexPath,buf,pCfgParam)<0)   return -1;

memset(buf,0,sizeof(buf));
sprintf(buf,"%s.%s",tmpChar,"idxNamePrefix");
memset(idxNamePrefix,0,sizeof(idxNamePrefix));	
if( readCfgParam(idxNamePrefix,buf,pCfgParam)<0)   return -1;
rtrim(idxNamePrefix);
idxNamePrefix[3]='\0';

memset(buf,0,sizeof(buf));
sprintf(buf,"%s.%s",tmpChar,"procID");
memset(procID,0,sizeof(procID));	
if( readCfgParam(procID,buf,pCfgParam)<0) return -1;

memset(buf,0,sizeof(buf));
sprintf(buf,"%s.%s",tmpChar,"runFlag");
runFlag = 0;	
if( readCfgParam(&runFlag,buf,pCfgParam)<0)   return -1;

memset(buf,0,sizeof(buf));
sprintf(buf,"%s.%s",tmpChar,"sleepTime");
sleepTime = 30;
if( readCfgParam(&sleepTime,buf,pCfgParam)<0)   return -1;

/* 如果該應用程序需要其他參數配合,在下面添加 */

return 0;
}

/* 程序不正常關閉,在重啟后需要作會滾操作*/
void  redoHandler(char * programName)
{
char fullPathName[128+1];
FILE * fp;
char buf[128+1];
char tmpFileName[128+1];
char objPath[128+1];

memset(fullPathName,0,sizeof(fullPathName));
sprintf(fullPathName,"%s/%s.break",tmpPath,programName);

/* 沒有斷點文件,返回 */
if( access(fullPathName,F_OK) != 0 ) return;
if( (fp=fopen(fullPathName,"r")) == NULL ){
	memset(buf,0,sizeof(buf));
	sprintf(buf,"Can't open break file %s for read!",fullPathName);
	throw (char *)buf;
	}

while(memset(buf,0,sizeof(buf)),fgets(buf,256,fp)!=NULL){
	memset(tmpFileName,0,sizeof(tmpFileName));
	memset(objPath,0,sizeof(objPath));
	getTextField(tmpFileName,buf,',',1);
	getTextField(objPath,buf,',',2);
	if( access(tmpFileName,F_OK) == 0 ) mvfile(tmpFileName,objPath);
	}
fclose(fp);
remove(fullPathName);		
}

/* 在程序需要維護數據一致性的地方開始事務 */
void beginTran(char * programName,char * fileName)
{
FILE * fp;
char fullPathName[128+1];
char newPathName[128+1];
char buf[128+1];
int  k;

memset(fullPathName,0,sizeof(fullPathName));
sprintf(fullPathName,"%s/.%s.break",tmpPath,programName);
if( (fp=fopen(fullPathName,"w")) == NULL ){
	memset(buf,0,sizeof(buf));
	sprintf(buf,"Can't open break file %s for write!",fullPathName);
	throw (char *)buf;
	}

/* 記錄輸入文件 */
memset(buf,0,sizeof(buf));
sprintf(buf,"%s/%s.lst,%s\n",inputPath,fileName,bakPath);
fputs(buf,fp);	
	
/* 記錄輸出文件 */
memset(buf,0,sizeof(buf));
sprintf(buf,"%s/%s.chk,%s\n",tmpPath,fileName,outputPath);
fputs(buf,fp);	

/* 記錄錯誤文件 */
memset(buf,0,sizeof(buf));
sprintf(buf,"%s/%s.dup,%s\n",tmpPath,fileName,errorPath);
fputs(buf,fp);	

/* 記錄索引文件 */
for(k=0;k<totalIndexFiles;k++){
	memset(buf,0,sizeof(buf));
	sprintf(buf,"%s/%s%s.idx,%s\n",tmpPath,idxNamePrefix,pIndexName[k].callDate,indexPath);
	fputs(buf,fp);
	}	
fclose(fp);

memset(newPathName,0,sizeof(newPathName));
sprintf(newPathName,"%s/%s.break",tmpPath,programName);
rename(fullPathName,newPathName);
}

/* 在程序需要維護數據一致性的地方提交事務 */
void commitTran(char * programName)
{
char fullPathName[128+1];
memset(fullPathName,0,sizeof(fullPathName));
sprintf(fullPathName,"%s/%s.break",tmpPath,programName);
remove(fullPathName);	
}

/* 獲取程序調度標志 */
int  getProgramStatu(char * programName,char * tmpPath)
{
char fullPathName[128+1];

memset(fullPathName,0,sizeof(fullPathName));		
sprintf(fullPathName,"%s/%s.stop",tmpPath,programName);
/* 有停止進程標志文件存在,程序需要退出             */
if( access(fullPathName,F_OK) == 0 ){
	remove(fullPathName);
	return 0;  	
	}
return 1;
}



/* 返回值小于0為錯誤,錯誤代碼范圍為301-310   */
/* E301 計費號碼msisdn非13開頭,不足11位      */
/* E302 重單                                  */
/* E303 時間不合法                            */

/* 追加到日志記錄 */
void addToLogBuf(char * origenName,int isDup)
{
/* 對無主清單特殊處理,文件名太多,忽略 */
if( totalLogBuf > 1020 ) return ;
if( strncmp(pLogCkDpBuf[totalLogBuf].origenName,origenName,24) == 0){
	pLogCkDpBuf[totalLogBuf].totalNum ++;
	pLogCkDpBuf[totalLogBuf].curNum   += ( 1 - isDup );	
	}
else {
	if( strlen(pLogCkDpBuf[totalLogBuf].origenName) != 0  ) totalLogBuf++;
	memcpy(pLogCkDpBuf[totalLogBuf].origenName,origenName,24);
	pLogCkDpBuf[totalLogBuf].origenName[24]='\0';
	pLogCkDpBuf[totalLogBuf].totalNum = 1;
	pLogCkDpBuf[totalLogBuf].curNum   = ( 1 - isDup );
	}
//printf("END [%4d][%s]\n",totalLogBuf,pLogBuf[totalLogBuf].origenName);getchar();
}

/* 向索引數據中追加索引              */
/*  1 追加成功,非重單               */
/* -1 追加失敗,是重單               */
int addToIndexList(typeMoreKeyList * pMoreKeyList,int pos,char * sKey1,char * sKey2)
{
typeOneKeyList * * p;
int key1,key2;
int k;
int i;

key1 = atoi(sKey1);
key2 = atoi(sKey2);

/* 首先依次循環定長數組 */

//printf("pos =%d,key1=%d,key2=%d",pos,key1,key2);getchar();
for(i=0;i<4*ONEDAYONEUSERCDR;i++){
	if( (pMoreKeyList[pos].pKeyArray)[i].key1 == 0 && 
	    (pMoreKeyList[pos].pKeyArray)[i].key2 == 0 ){
	    	(pMoreKeyList[pos].pKeyArray)[i].key1 = key1; 
		(pMoreKeyList[pos].pKeyArray)[i].key2 = key2;
		return  1;  /* 非重單 */
		}

	if( (pMoreKeyList[pos].pKeyArray)[i].key1 == key1 && 
	    (pMoreKeyList[pos].pKeyArray)[i].key2 == key2 ){
		return -1;
	}
	
	}

/* 其次依次循環動態鏈表 */	
for(p=&(pMoreKeyList[pos].pKeyList);(*p)!=NULL;p=&((*p)->p)){
	if( (*p)->key1 == key1 && (*p)->key2 == key2 ){
		return -1;  
		}
	}
(*p) = new typeOneKeyList ;
if( (*p) == NULL){
	throw (char *)"new typeOneKeyList fail!" ;
	}

(*p)->key1 = key1;
(*p)->key2 = key2;
(*p)->p    = NULL;
return 1;                  /* 非重單 */
}

/*  根據通話日期初始化索引數據  */
void readIndexFile(char * callDate,char * indexPath,typeMoreKeyList * * pMoreKeyList,char * idxNamePrefix)
{
char fullPathName[128+1];
FILE * fpIdx;
char buf[256+1];
char tmpBuf[16+1];
char msisdn[11+1];
char callTime[6+1];
char sKey1[9+1];
char sKey2[9+1];
int  k;
int  i;
int  pos;

/* 為一天的索引申請內存空間  */
(*pMoreKeyList) = new typeMoreKeyList[10000];
if( pMoreKeyList == NULL ){
	memset(buf,0,sizeof(buf));
	sprintf(buf,"Can't new index pMoreKeyList!\n");
	throw (char *)buf;
	}	
//printf("ONEDAYONEUSERCDR=%d",ONEDAYONEUSERCDR);getchar();
/* 索引關鍵字全部初始化為0   */
for(k=0;k<10000;k++){
	for(i=0;i<4*ONEDAYONEUSERCDR;i++) {
		((*pMoreKeyList)[k].pKeyArray)[i].key1 = 0;
		((*pMoreKeyList)[k].pKeyArray)[i].key2 = 0;
		}
	(*pMoreKeyList)[k].pKeyList = NULL;
	}

/* 打開索引文件用于讀寫索引數據  */
memset(fullPathName,0,sizeof(fullPathName));

if ((strncmp(orgfileName,"p",1) == 0) || (strncmp(orgfileName,"m",1) == 0))
	sprintf(fullPathName,"%s/%s%10.10s.idx01",indexPath,idxNamePrefix,callDate);
if ((strncmp(orgfileName,"q",1) == 0) || (strncmp(orgfileName,"w",1) == 0))
	sprintf(fullPathName,"%s/%s%10.10s.idx02",indexPath,idxNamePrefix,callDate);
	
if(access(fullPathName,F_OK) != 0) return;
if( (fpIdx=fopen(fullPathName,"r")) == NULL){
	memset(buf,0,sizeof(buf));
	sprintf(buf,"Can't init index file %s!\n",fullPathName);
	throw (char *)buf;
	}
//printf("fullPathName=%s\n",fullPathName);getchar();
while(memset(buf,0,sizeof(buf)),fgets(buf,256,fpIdx)!=NULL){
	subStrCpy(msisdn,buf,0,9);
	subStrCpy(callTime,buf,10,6);
	subStrCpy(sKey2,buf,17,9);
	
	subStrCpy(tmpBuf,msisdn,5,4);
	pos = atoi(tmpBuf);
	
	memset(sKey1,0,sizeof(sKey1));
	sprintf(sKey1,"%5.5s%4.4s",msisdn,callTime+2);
	
	//printf("%s\n",buf);getchar();
	//printf("Index: %9d,%s,%s\n",pos,sKey1,sKey2);getchar();
	addToIndexList(*pMoreKeyList,pos,sKey1,sKey2);
	//getchar();
	}
fclose(fpIdx);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产呦精品一区二区三区网站| 精品久久国产字幕高潮| 97久久超碰国产精品电影| 国产精品夜夜爽| 成人综合在线观看| 成人av电影免费观看| 风流少妇一区二区| 99精品一区二区| 色综合久久综合网欧美综合网| 99久久免费精品| 91丨porny丨户外露出| 91丝袜呻吟高潮美腿白嫩在线观看| 本田岬高潮一区二区三区| 99久久精品久久久久久清纯| 国产免费成人在线视频| 久久综合九色综合97婷婷女人 | 欧美性xxxxxxxx| 欧美视频你懂的| 91精品国产乱| 久久久亚洲国产美女国产盗摄| 国产日本欧美一区二区| 国产精品不卡一区二区三区| 亚洲欧美区自拍先锋| 亚洲不卡在线观看| 精品亚洲porn| 99久久久无码国产精品| 欧美日韩一级片在线观看| 日韩一区二区精品在线观看| 久久你懂得1024| 亚洲欧美色一区| 日韩综合小视频| 国产在线不卡一卡二卡三卡四卡| 成人永久aaa| 欧美三级午夜理伦三级中视频| 欧美成人伊人久久综合网| 欧美国产视频在线| 亚洲国产精品久久久久婷婷884| 久久精品理论片| 成人av第一页| 日韩一区二区免费高清| 国产精品国产三级国产| 婷婷久久综合九色国产成人| 国产一区二区三区观看| 色婷婷激情综合| 日韩免费观看2025年上映的电影| 国产精品免费aⅴ片在线观看| 一区二区欧美国产| 国产最新精品免费| 欧美在线视频日韩| 国产亚洲精品aa午夜观看| 亚洲一区二区三区小说| 激情综合网av| 欧美日韩久久久| 中文字幕第一区综合| 天天射综合影视| caoporn国产一区二区| 制服丝袜av成人在线看| 国产精品久久久久久久久免费相片| 日日摸夜夜添夜夜添国产精品| 成人小视频免费在线观看| 欧美日韩精品福利| 国产精品久久网站| 精品在线你懂的| 欧美区一区二区三区| 综合久久久久久| 国产一区二区免费看| 欧美日韩另类国产亚洲欧美一级| 国产精品不卡视频| 精品一区二区三区免费毛片爱| 欧洲视频一区二区| 国产精品久久久久久久浪潮网站| 美女视频一区在线观看| 欧美视频在线不卡| 中文字幕在线一区二区三区| 国产在线国偷精品产拍免费yy| 91.xcao| 夜夜嗨av一区二区三区网页| eeuss鲁片一区二区三区在线看| 久久综合久久综合久久综合| 日本免费新一区视频| 精品视频在线看| 亚洲免费观看高清完整版在线观看| 粉嫩嫩av羞羞动漫久久久 | 亚洲成人7777| 91视视频在线直接观看在线看网页在线看| 欧美精品一区二区三区蜜桃| 日韩av不卡在线观看| 欧美视频日韩视频| 亚洲一区二区三区四区的| 色狠狠色噜噜噜综合网| 国产精品不卡一区二区三区| 成人美女在线观看| 日本一区二区免费在线观看视频| 国产综合色视频| 精品动漫一区二区三区在线观看| 蜜臀久久99精品久久久久久9| 在线成人免费观看| 婷婷激情综合网| 91精品欧美一区二区三区综合在| 亚洲成人免费视频| 欧美日韩国产a| 日韩电影免费在线看| 欧美一区二区三区在线| 奇米在线7777在线精品 | 亚洲成人一二三| 欧美日韩一二三| 丝袜美腿一区二区三区| 91精品国产aⅴ一区二区| 日本成人在线一区| 日韩视频在线永久播放| 久久aⅴ国产欧美74aaa| 精品久久久久久综合日本欧美| 韩国三级在线一区| 欧美国产欧美亚州国产日韩mv天天看完整 | 久久精品亚洲麻豆av一区二区| 国产成人av一区二区三区在线观看| 久久久久久亚洲综合影院红桃| 国产成人啪午夜精品网站男同| 久久久精品免费观看| 成人激情电影免费在线观看| 亚洲视频1区2区| 欧美日韩精品是欧美日韩精品| 日韩电影在线观看电影| 26uuu亚洲综合色欧美| 成人av在线一区二区三区| 一区二区三区精品| 欧美一区二区福利视频| 国产成人精品免费一区二区| 日韩毛片精品高清免费| 欧美三级日韩在线| 国产一区二区三区四区在线观看| 中文字幕免费不卡| 日本电影欧美片| 麻豆国产欧美日韩综合精品二区| 日本一区二区动态图| 色偷偷一区二区三区| 蜜臀久久99精品久久久画质超高清| 久久精品视频一区二区三区| 91色九色蝌蚪| 蜜桃av一区二区三区| 国产精品久久久久久户外露出 | 亚洲综合一区在线| 精品久久久久久综合日本欧美| www.99精品| 免费成人在线观看| 国产精品日韩精品欧美在线| 欧美系列日韩一区| 国产做a爰片久久毛片 | 一本色道久久综合狠狠躁的推荐| 婷婷久久综合九色综合绿巨人| 久久女同精品一区二区| 在线观看亚洲精品视频| 国产一区二区三区在线观看免费视频| 亚洲裸体xxx| 精品久久一区二区三区| 色av一区二区| 国产黑丝在线一区二区三区| 亚洲图片一区二区| 国产欧美1区2区3区| 欧美麻豆精品久久久久久| 国产成人av电影在线| 天堂av在线一区| 国产精品久久久久三级| 欧美不卡在线视频| 在线观看视频91| 成人黄色一级视频| 国产自产2019最新不卡| 五月天网站亚洲| 亚洲欧洲成人av每日更新| 欧美哺乳videos| 欧美日韩精品一区二区天天拍小说| 成人福利电影精品一区二区在线观看| 天堂午夜影视日韩欧美一区二区| 欧美激情一区在线观看| 精品国产凹凸成av人导航| 日本高清不卡一区| 99热这里都是精品| 国产精品一区二区三区网站| 免费成人深夜小野草| 亚洲123区在线观看| 日韩美女精品在线| 国产精品天天摸av网| 精品国产青草久久久久福利| 欧美日韩电影一区| 欧美在线播放高清精品| 99麻豆久久久国产精品免费| 粉嫩一区二区三区在线看| 国产一区美女在线| 久久不见久久见免费视频1| 日韩高清不卡一区二区三区| 亚洲图片自拍偷拍| 亚洲主播在线观看| 亚洲在线视频免费观看| **欧美大码日韩| 国产精品久久久久久久久晋中| 久久久噜噜噜久久人人看| 亚洲精品一区二区三区四区高清 | 一区二区高清在线| 亚洲欧美经典视频| 玉米视频成人免费看|