/** * @brief 读取月冻结表数据 * @param pmon 缓存区指针 * @param dbtime 读取时间 * @return 成功返回读取表数, 失败返回-1 */ int ReadPlMdbMonth(plmdb_mon_t *pmon, dbtime_t dbtime) { char filename[32]; int readlen, i, metnum; unsigned char *pcache; plmdb_savehead_t *phead; PlMdbFileName(filename, PLMDB_MONTH, dbtime); DebugPrint(0, "read %s...\n", filename); readlen = ReadBinFileCache(filename, PLMDB_MAGIC, PlMdbCache, sizeof(PlMdbCache)); if(readlen < 0) return -1; phead = (plmdb_savehead_t *)PlMdbCache; if(phead->metnum1 != phead->metnum2 || phead->metnum1 > MAX_PLCMET) return -1; metnum = (int)phead->metnum1&0xffff; i = metnum * sizeof(plmdb_mon_t); if((i+sizeof(plmdb_savehead_t)) != readlen) return -1; pcache = (unsigned char *)(phead+1); memcpy(pmon, pcache, i); if(metnum < MAX_PLCMET) { pcache = (unsigned char *)pmon; pcache += i; memset(pcache, PLDATA_EMPTY, MAX_PLCMET*sizeof(plmdb_mon_t)-i); } return metnum; }
/** * @brief 读取重点用户表数据 * @param pimp 缓存区指针 * @param dbtime 读取时间 * @return 成功返回读取表数, 失败返回-1 */ int ReadPlMdbImp(plmdb_imp_t *pimp, dbtime_t dbtime) { char filename[32]; int readlen; PlMdbFileName(filename, PLMDB_IMP, dbtime); DebugPrint(LOGTYPE_SHORT, "read %s...\n", filename); readlen = ReadBinFileCache(filename, PLMDB_MAGIC, PlMdbCache, sizeof(PlMdbImp)); if(readlen != sizeof(PlMdbImp)) return -1; memcpy(pimp, PlMdbCache, sizeof(PlMdbImp)); return MAX_IMPORTANT_USER; }
static void LoadPltData(void) { char filename[64]; sysclock_t clock; int len, itemlen, i, maxprd; plt_filedata_t *pcache; unsigned char *pbuf; ResetPltData(); SysClockRead(&clock); sprintf(filename, "%sdaytest@%02d%02d%02d.db", PLT_FILEPATH, clock.year, clock.month, clock.day); SYSCLOCK_DBTIME(&clock, PltFileDate); PltFileDate.s.tick = 0; len = ReadBinFileCache(filename, MAGIC_FILE_PLT, PltFileCache, sizeof(PltFileCache)); if(len < 4) return; pcache = (plt_filedata_t *)PltFileCache; if(pcache->max_prd == 0 || pcache->max_prd > MAX_FILE_PRD) return; if(pcache->max_met == 0 || pcache->max_met > MAX_PLCMET) return; itemlen = (int)pcache->max_met&0xffff; itemlen = itemlen*MET_DATA_LEN+PRD_HEAD_LEN; maxprd = (int)pcache->max_prd&0xff; i = maxprd*itemlen+FILE_HEAD_LEN; if(len != i) { ErrorLog("invalid file len(%d, %d)\n", len, i); return; } PltFileData.invaid_prd = pcache->invaid_prd; pbuf = (unsigned char *)pcache->prd; for(i=0; i<maxprd; i++) { memcpy(&PltFileData.prd[i], pbuf, itemlen); pbuf += itemlen; } }
/** * @brief 读取日冻结表数据 * @param pday 缓存区指针 * @param dbtime 读取时间 * @return 成功返回读取表数, 失败返回-1 */ int ReadPlMdbDay(plmdb_day_t *pday, dbtime_t dbtime) { char filename[32]; int readlen, i, metnum; unsigned char *pcache; plmdb_savehead_t *phead; printf("ReadPlMdbDay1...\n"); PlMdbFileName(filename, PLMDB_DAY, dbtime); DebugPrint(0, "read %s...\n", filename); //将文件中的数据读到PlMdbCache全局数组 readlen = ReadBinFileCache(filename, PLMDB_MAGIC, PlMdbCache, sizeof(PlMdbCache)); if(readlen < 0) return -1; printf("ReadPlMdbDay2...\n"); phead = (plmdb_savehead_t *)PlMdbCache; if(phead->metnum1 != phead->metnum2 || phead->metnum1 > MAX_PLCMET) return -1; metnum = (int)phead->metnum1&0xffff; i = metnum * sizeof(plmdb_day_t); printf("metnum = %d\n",metnum); if((i+sizeof(plmdb_savehead_t)) != readlen) return -1; printf("ReadPlMdbDay3...\n"); pcache = (unsigned char *)(phead+1); printf("i = %d\n",i); memcpy(pday, pcache, i); if(metnum < MAX_PLCMET) { pcache = (unsigned char *)pday; pcache += i; memset(pcache, PLDATA_EMPTY, MAX_PLCMET*sizeof(plmdb_day_t)-i); } //DebugPrint(0, "read %d met\n", metnum); return metnum; }