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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? tdbf.cpp

?? 一個(gè)與銀行通訊的測(cè)試程序
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
#include "stdafx.h"
#include <io.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/locking.h>
#include <share.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#include "tdbf.h"

#ifdef  min
#undef  min
#define min(a, b)  ((a) < (b)) ? (a) : (b)
#endif
#ifdef  max
#undef  max
#define max(a, b)  ((a) > (b)) ? (a) : (b)
#endif

static const long XBASE_LOCK_OFFSET = 0x40000000L;
static const long CLIPPER_LOCK_OFFSET = 1000000000L;
static const long LOCK_FILE_LEN = 0x3FFFFFFFL;
static const int HEAD_LEN = 32;
static const int FIELD_LEN = 32;

TDBFField::TDBFField()
{
    memset(Name, 0, sizeof(Name));
    Type = 'C';
    Width = 10;
    Dec = 0;
    Offset = 0;
}

TDBFField::TDBFField(const char * aName, unsigned char aType,
                     unsigned int aWidth, unsigned int aDec
                    )
{
    if(aName)
    {
        strncpy(Name, aName, sizeof(Name));
        strupr(Name);
    }
    Type = aType;
    Width = aWidth;
    Dec = aDec;
    Offset = 0;
}

void TDBFField::SetField(const char * aName, unsigned char aType,
                     unsigned int aWidth, unsigned int aDecsfzyh
                    )
{
    if(aName)
    {
        strncpy(Name, aName, sizeof(Name));
        strupr(Name);
    }
    Type = aType;
    Width = aWidth;
    Dec = aDecsfzyh;
}

TDBF::TDBF()
{
    m_lockWaitTime = 5;

    m_fieldNumber = 0;
    m_fieldInfo = 0;
    m_databaseName = 0;
    m_recordBuffer = 0;
    
    m_openMode = 0;
    m_errorCode = DBF_SUCCESS;

    m_fp = -1;

    m_lockType = ltNoLock;

    memset((void *)&m_head, 0, sizeof(TDBFHead));
}

TDBF::~TDBF()
{
    Close();
}

void TDBF::Open(const char * aFileName, int aMode)
{
    int accessType = 0, shareType = 0, ownerType = 0;
    unsigned int i;

    m_databaseName = new char[strlen(aFileName) + 1];
    strcpy(m_databaseName, aFileName);
    m_openMode = aMode;
    m_errorCode = DBF_SUCCESS;
    TDBFFieldStruct fieldStruct;

    if(aMode & ShareOpen)
    {
        shareType |= _SH_DENYNO;
        m_openMode |= XbaseLock;
    }
    else // 獨(dú)占打開(kāi)忽略所有加鎖選項(xiàng)
    {
        m_openMode &= ~(XbaseLock | ClipperLock | AutoReadLock | AutoWriteLock);
    }

    if(aMode & ReadOnly)
        accessType |= O_RDONLY;

    if(aMode & ReadWrite) {
        accessType |= O_RDWR;
        ownerType |= S_IREAD | S_IWRITE;
    }

    accessType |= O_BINARY;

    if(aMode & ShareOpen)
        m_fp = ::sopen(aFileName, accessType, shareType, ownerType);
    else
        m_fp = ::sopen(aFileName, accessType, SH_DENYRW, ownerType);

    if(m_fp == -1)
    {
        m_errorCode = DBF_OPEN_FILE_ERROR;
        return;
    }

    memset((void *)&m_head, 0, sizeof(TDBFHead));

    ReadHead();
    if(m_errorCode != DBF_SUCCESS)
    {
        Close();
        return;
    }

    m_fieldNumber = m_head.RecordOffset / sizeof(TDBFFieldStruct);
    if(m_fieldNumber <= 1)
    {
        m_errorCode = DBF_NOT_XBASE_FILE;
        Close();
        return;
    }

    m_fieldNumber --;

    m_fieldInfo = new TDBFField[m_fieldNumber];

    memset(m_fieldInfo, 0, sizeof(TDBFField) * m_fieldNumber);

    ::lseek(m_fp, HEAD_LEN, SEEK_SET);
    for(i = 0; i < m_fieldNumber; i ++)
    {
        if(::read(m_fp, &fieldStruct, sizeof(TDBFFieldStruct)) != sizeof(TDBFFieldStruct))
        {
            m_errorCode = DBF_READ_FILE_ERROR;
            Close();
            return;
        }
        strncpy(m_fieldInfo[i].Name, fieldStruct.Name, sizeof(m_fieldInfo[i].Name));
        m_fieldInfo[i].Type = fieldStruct.Type;
        m_fieldInfo[i].Width = fieldStruct.Width;
        m_fieldInfo[i].Dec = fieldStruct.Dec;
        if(i == 0)
            m_fieldInfo[i].Offset = 1;
        else
            m_fieldInfo[i].Offset = m_fieldInfo[i - 1].Offset + m_fieldInfo[i - 1].Width;
    }

    m_recordBuffer = new char[m_head.RecordWidth + 1];
    memset(m_recordBuffer, 0, m_head.RecordWidth + 1);
}

void TDBF::Close()
{
    if(m_fp != -1)
    {
        close(m_fp);
        m_fp = -1;
    }

    if(m_databaseName != NULL)
    {
        delete (void *) m_databaseName;
        m_databaseName = NULL;
    }

    if(m_recordBuffer != NULL)
    {
        delete m_recordBuffer;
        m_recordBuffer = NULL;
    }

    if(m_fieldInfo != NULL)
    {
        delete m_fieldInfo;
        m_fieldInfo = NULL;
    }

    m_fieldNumber = 0;
    m_errorCode = DBF_SUCCESS;
}

void TDBF::ReadHead()
{
    TDBFHead tempHead;

    m_errorCode = DBF_SUCCESS;

    if(::lseek(m_fp, 0L, SEEK_SET) == -1)
    {
        m_errorCode = DBF_READ_FILE_ERROR;
        return;
    }
    if(::read(m_fp, &tempHead, sizeof(tempHead)) != sizeof(tempHead))
    {
        m_errorCode = DBF_READ_FILE_ERROR;
        return;
    }
    if(tempHead.RecordOffset <= 0 || tempHead.RecordWidth <= 0)
    {
        m_errorCode = DBF_READ_FILE_ERROR;
        return;
    }

    memcpy(&m_head, &tempHead, sizeof(m_head));
}

void TDBF::WriteHead()
{
    time_t t;
    struct tm tmlocal;

    m_errorCode = DBF_SUCCESS;

    t = ::time(&t);
    tmlocal = *(::localtime(&t));
/*
    if(m_head.RecordNumber < 0 || m_head.RecordNumber > 200000)
    {
        char buffer[200];

        sprintf(buffer, "%d", m_head.RecordNumber);
        m_errorCode = DBF_READ_FILE_ERROR;
        return;
    }
*/
    m_head.Year = (unsigned char)(tmlocal.tm_year % 100);
    m_head.Month = (unsigned char)(tmlocal.tm_mon + 1);
    m_head.Day = (unsigned char)tmlocal.tm_mday;

    if(::lseek(m_fp, 0L, SEEK_SET) == -1)
    {
        m_errorCode = DBF_READ_FILE_ERROR;
        return;
    }

    if(::write(m_fp, &m_head, sizeof(m_head)) != sizeof(m_head))
      m_errorCode = DBF_READ_FILE_ERROR;
}

void TDBF::ReadRecord(long rec)
{
    m_errorCode = DBF_SUCCESS;

    if(rec < 1L || rec > m_head.RecordNumber)
    {
        m_errorCode = DBF_RECORD_NUMBER_ERROR;
        return;
    }

    if(m_openMode & AutoReadLock)
    {
        LockRecord(rec);
        if(m_errorCode != DBF_SUCCESS)
            return;
    }

    ::lseek(m_fp, RecordOffset(rec), SEEK_SET);
    if(::read(m_fp, m_recordBuffer, m_head.RecordWidth) != m_head.RecordWidth)
        m_errorCode = DBF_READ_FILE_ERROR;

    if(m_openMode & AutoReadLock)
        UnlockRecord(rec);
}

void TDBF::WriteRecord(long rec)
{
    m_errorCode = DBF_SUCCESS;

    if(rec < 1L || rec > m_head.RecordNumber)
    {
      m_errorCode = DBF_RECORD_NUMBER_ERROR;
      return;
    }

    if(m_lockType == ltNoLock && m_openMode & AutoWriteLock)
    {
      LockRecord(rec);
      if(m_errorCode != DBF_SUCCESS)
        return;
    }

    ::lseek(m_fp, RecordOffset(rec), SEEK_SET);
    if(::write(m_fp, m_recordBuffer, m_head.RecordWidth) != m_head.RecordWidth)
    {
      if(m_lockType == ltNoLock && m_openMode & AutoWriteLock)
        UnlockRecord(rec);
      m_errorCode = DBF_WRITE_FILE_ERROR;
      return;
    }

    if(m_lockType == ltNoLock && m_openMode & AutoWriteLock)
      UnlockRecord(rec);
}

void TDBF::AppendRecord()
{
    m_errorCode = DBF_SUCCESS;

    if(m_lockType == ltNoLock && m_openMode & AutoWriteLock)
    {
        LockFile();
        if(m_errorCode != DBF_SUCCESS)
            return;
    }

    ReadHead();
    if(m_errorCode != DBF_SUCCESS)
        goto __end;

    if(::lseek(m_fp, RecordOffset(m_head.RecordNumber+1L), SEEK_SET) == -1)
    {
        m_errorCode = DBF_WRITE_FILE_ERROR;
        goto __end;
    }

    if(::write(m_fp, m_recordBuffer, m_head.RecordWidth) != m_head.RecordWidth)
    {
        m_errorCode = DBF_WRITE_FILE_ERROR;
        goto __end;

    }
    if(::write(m_fp, "\x1A", 1) != 1)
    {
        m_errorCode = DBF_WRITE_FILE_ERROR;
        goto __end;
    }

    if(m_errorCode == DBF_SUCCESS)
    {
        m_head.RecordNumber ++;
        WriteHead();
    }

__end:
    if(m_lockType == ltNoLock && m_openMode & AutoWriteLock)
        UnlockFile();
}

void TDBF::DeleteRecord(long rec)
{
    m_errorCode = DBF_SUCCESS;

    ReadRecord(rec);
    if(m_errorCode != DBF_SUCCESS)
        return;

  if(m_recordBuffer[0] == ' ')
    {
        m_recordBuffer[0] = '*';
        WriteRecord(rec);
    }
}

void TDBF::UndeleteRecord(long rec)
{
    m_errorCode = DBF_SUCCESS;

    if(rec < 1L || rec > m_head.RecordNumber) {
        m_errorCode = DBF_RECORD_NUMBER_ERROR;
        return;
    }

    ReadRecord(rec);
    if(m_errorCode != DBF_SUCCESS)
       return;

   if(m_recordBuffer[0] == '*')
    {
        m_recordBuffer[0] = ' ';
        WriteRecord(rec);
    }
}

int TDBF::IsDelete()
{
    m_errorCode = DBF_SUCCESS;

    if(m_recordBuffer[0] == '*')
        return 1;
    return 0;
}

void TDBF::LockRecord(long rec)
{
    long offset;
    time_t t1, t2;
    int result;

    m_errorCode = DBF_SUCCESS;

    if(rec < 1L || rec > m_head.RecordNumber)
    {
        m_errorCode = DBF_RECORD_NUMBER_ERROR;
        return;
    }

    if(m_openMode & XbaseLock)
        offset = XBASE_LOCK_OFFSET + RecordOffset(rec);
    else
        offset = CLIPPER_LOCK_OFFSET + rec;

    time(&t1);
    do
    {
       if(m_openMode & XbaseLock)
	   {
		  lseek(m_fp, offset, SEEK_SET);
          result = _locking(m_fp, LK_NBLCK, (long) m_head.RecordWidth);
	   }
       else
	   {
		  lseek(m_fp, offset, SEEK_SET);
          result = _locking(m_fp, LK_NBLCK, 1L);
	   }
       time(&t2);
    } while(difftime(t2, t1) <= m_lockWaitTime && result != 0);

    if(result != 0)
        m_errorCode = DBF_LOCK_RECORD_ERROR;
}

void TDBF::UnlockRecord(long rec)
{
    long offset;
    int result;

    m_errorCode = DBF_SUCCESS;

    if(rec < 1L || rec > m_head.RecordNumber)
    {
        m_errorCode = DBF_RECORD_NUMBER_ERROR;
        return;
    }

    if(m_openMode & XbaseLock)
        offset = XBASE_LOCK_OFFSET + RecordOffset(rec);
    else
        offset = CLIPPER_LOCK_OFFSET + rec;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99国产欧美久久久精品| 国产丝袜欧美中文另类| 在线观看精品一区| 色网综合在线观看| 99久久精品国产麻豆演员表| 粉嫩aⅴ一区二区三区四区| 懂色av中文字幕一区二区三区| 国产成人综合网站| 大胆欧美人体老妇| www.成人网.com| 色综合网站在线| 色婷婷国产精品| 欧美日韩日日骚| 欧美裸体一区二区三区| 欧美一区二区三区免费| 精品毛片乱码1区2区3区| 26uuu久久综合| 欧美国产日本韩| 亚洲精品久久久久久国产精华液| 一区二区三区视频在线看| 亚洲国产精品嫩草影院| 无吗不卡中文字幕| 麻豆久久久久久久| 国产精品99久久久久久久女警| 成人性生交大片免费| 91亚洲男人天堂| 欧美日韩国产片| 精品欧美久久久| 国产精品丝袜黑色高跟| 亚洲精品成人在线| 蜜臀av一区二区在线观看| 国产麻豆精品视频| 色婷婷av一区二区三区软件| 欧美另类videos死尸| 日韩免费视频一区二区| 欧美激情综合五月色丁香| 一区二区三区在线高清| 久久精品免费观看| 不卡的av电影| 欧美一级生活片| 中文字幕免费不卡| 亚洲国产美女搞黄色| 久草精品在线观看| 色综合久久综合| 日韩三级视频在线看| 国产精品毛片高清在线完整版| 亚洲制服丝袜av| 国产麻豆一精品一av一免费 | 欧美视频一区二区三区四区| 日韩一区二区影院| 一色屋精品亚洲香蕉网站| 亚洲国产日韩在线一区模特| 国产电影精品久久禁18| 欧美系列一区二区| 国产亚洲一区字幕| 亚洲bt欧美bt精品777| 国产91高潮流白浆在线麻豆| 欧美精品自拍偷拍动漫精品| 亚洲国产精品黑人久久久| 视频一区二区三区在线| 成人sese在线| 精品久久国产老人久久综合| 一区二区三区欧美日韩| 激情偷乱视频一区二区三区| 欧美在线视频日韩| 久久久777精品电影网影网| 亚欧色一区w666天堂| 99re这里只有精品6| 精品剧情v国产在线观看在线| 一级做a爱片久久| 丰满少妇久久久久久久| 欧美一级视频精品观看| 亚洲一区二区三区在线播放| 国产69精品久久久久毛片 | 91色综合久久久久婷婷| 欧美一区二区在线不卡| 一区二区三区国产豹纹内裤在线 | 欧美探花视频资源| 国产精品九色蝌蚪自拍| 国产九色sp调教91| 日韩欧美一级精品久久| 亚洲mv在线观看| 色94色欧美sute亚洲线路一ni| 久久久久97国产精华液好用吗| 午夜精品视频在线观看| 色噜噜偷拍精品综合在线| 国产精品毛片无遮挡高清| 国产自产v一区二区三区c| 日韩精品专区在线影院观看| 天堂蜜桃91精品| 欧美在线一区二区三区| 一区二区三区免费在线观看| 色综合天天综合网天天看片| 国产精品久久久久三级| 成人午夜av电影| 亚洲国产激情av| 国产福利91精品一区二区三区| 久久看人人爽人人| 国产一区二区三区在线观看免费视频| 日韩欧美一区二区在线视频| 日本aⅴ精品一区二区三区| 欧美精品久久一区| 肉丝袜脚交视频一区二区| 欧美疯狂做受xxxx富婆| 天天亚洲美女在线视频| 欧美三级日韩三级国产三级| 亚洲一区二区三区四区中文字幕 | 久久久噜噜噜久久中文字幕色伊伊 | 自拍偷拍欧美激情| 国产精品欧美经典| 成人av电影免费观看| 亚洲视频狠狠干| 91啪九色porn原创视频在线观看| 日韩美女视频19| 色婷婷久久99综合精品jk白丝| 一区二区不卡在线播放 | 久久久激情视频| 岛国精品一区二区| **性色生活片久久毛片| 成人美女在线视频| ㊣最新国产の精品bt伙计久久| 91片在线免费观看| 图片区日韩欧美亚洲| 日韩免费一区二区三区在线播放| 激情图区综合网| 中文字幕一区二| 欧洲精品一区二区三区在线观看| 亚洲成人综合网站| 欧美tickling网站挠脚心| 国产成人在线免费| 亚洲天堂免费看| 欧美日韩一二三区| 极品少妇一区二区三区精品视频| 国产色91在线| 91久久国产综合久久| 天天综合色天天| 久久免费偷拍视频| 99精品久久久久久| 日韩中文字幕1| 久久精品免视看| 欧美无人高清视频在线观看| 麻豆国产一区二区| 中文字幕亚洲区| 91精品国产综合久久小美女| 国产精品1024| 亚洲图片欧美综合| 久久免费的精品国产v∧| 99在线精品观看| 日本欧美在线观看| 国产精品久久久久久久久免费樱桃| 91精彩视频在线| 国模一区二区三区白浆| 亚洲日本丝袜连裤袜办公室| 欧美一卡二卡三卡四卡| jlzzjlzz国产精品久久| 七七婷婷婷婷精品国产| 中文字幕一区视频| 日韩欧美另类在线| 在线一区二区三区四区| 国产呦萝稀缺另类资源| 亚洲国产欧美日韩另类综合| 国产欧美一二三区| 91麻豆精品国产91久久久使用方法| 丁香六月综合激情| 美女视频第一区二区三区免费观看网站| 中文字幕va一区二区三区| 91精品国产综合久久蜜臀| 成人激情免费视频| 麻豆精品新av中文字幕| 一区二区三区精品| 国产精品久久久久一区二区三区共| 日韩免费高清av| 在线观看免费一区| 99精品久久免费看蜜臀剧情介绍| 久88久久88久久久| 午夜精品一区二区三区免费视频| 专区另类欧美日韩| 日本一区二区在线不卡| 日韩一二三区视频| 欧美日韩在线播放一区| 99久精品国产| 成人免费看片app下载| 另类小说色综合网站| 午夜a成v人精品| 亚洲一区二区三区免费视频| 亚洲欧洲成人精品av97| 久久久久久久网| 精品日韩av一区二区| 日韩欧美精品在线| 7777女厕盗摄久久久| 欧美亚洲一区二区在线| 色综合天天天天做夜夜夜夜做| 成人永久aaa| 国产69精品久久久久毛片| 国产美女精品在线| 国产一区二区久久| 国产精品综合二区| 精品一区二区三区香蕉蜜桃 | 欧美老年两性高潮| 欧美日韩卡一卡二|