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

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

?? file.cpp

?? FastDb是高效的內存數據庫系統
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
}

#ifdef USE_SYSV_SHARED_MEMORY
if (!shmem.open(name, initSize))
{
  status = errno;

  if (fd >= 0)
  {
    ::close(fd);
  }

  return status;
}

mmapSize = initSize;
mmapAddr = shmem.get_base();
#else

mmapAddr = (char*)valloc(mmapSize);

if (mmapAddr == NULL)
{
  status = errno;

  if (fd >= 0)
  {
    ::close(fd);
  }

  return status;
}

#endif
lseek(fd, 0, SEEK_SET);

if ((size_t)::read(fd, mmapAddr, fileSize) != fileSize)
{
#ifdef USE_SYSV_SHARED_MEMORY
  shmem.close();
#else

free(mmapAddr);
#endif

  mmapAddr = NULL;
  status = errno;

  if (fd >= 0)
  {
    ::close(fd);
  }

  return status;
}

#else  // NO_MMAP
mmapAddr = (char*)mmap(NULL, mmapSize,
                       readonly ? PROT_READ : PROT_READ|PROT_WRITE,
                       mmap_attr, fd, 0);

if (mmapAddr == (char*)-1)
{
  status = errno;
  mmapAddr = NULL;

  if (fd >= 0)
  {
    ::close(fd);
  }

  return status;
}

#endif // NO_MMAP
#endif // USE_SYSV_SHARED_MEMORY && DISKLESS_CONIFIGURATION
#if defined(NO_MMAP) || defined(REPLICATION_SUPPORT)
  pageSize = getpagesize();

  pageMapSize = (mmapSize + dbModMapBlockSize*32 - 1) >> (dbModMapBlockBits + 5);

  pageMap = new int[pageMapSize];

  memset(pageMap, 0, pageMapSize*sizeof(int));

#endif
#if defined(REPLICATION_SUPPORT)

  db = NULL;

  int nPages = getMaxPages();

  currUpdateCount = new int[nPages];

  if (replicationSupport)
  {
    char* cFileName = new char[strlen(name) + 5];
    strcat(strcpy(cFileName, name), ".cnt");
#ifndef DISKLESS_CONFIGURATION

    cfd = ::open(cFileName, O_RDWR|O_DSYNC|O_CREAT, 0666);
    delete[] cFileName;

    if (cfd < 0)
    {
      return errno;
    }

    if (ftruncate(cfd, nPages*sizeof(int)) != ok)
    {
      status = errno;
      ::close(cfd);
      return status;
    }

#else
int mmap_attr = MAP_SHARED;

#ifndef MAP_ANONYMOUS

cfd = ::open("/dev/zero", O_RDONLY, 0);

#else

cfd = -1;

mmap_attr |= MAP_ANONYMOUS;

#endif
#endif

    diskUpdateCount = (int*)mmap(NULL, nPages*sizeof(int),
                                 PROT_READ|PROT_WRITE, mmap_attr, cfd, 0);

    if (diskUpdateCount == (int*)-1)
    {
      int status = errno;
      diskUpdateCount = NULL;

      if (cfd >= 0)
      {
        ::close(cfd);
      }

      return status;
    }

    int maxCount = 0;
    rootPage = dbMalloc(pageSize);

    for (int i = 0; i < nPages; i++)
    {
      int count = diskUpdateCount[i];
      currUpdateCount[i] = count;

      if (count > maxCount)
      {
        maxCount = count;
      }
    }

    updateCounter = maxCount;
    nRecovered = 0;
    recoveredEvent.open(true);
    syncEvent.open();
    startSync();
  }

#endif
  return ok;
}


#if defined(REPLICATION_SUPPORT)
void dbFile::syncToDisk()
{
  syncThread.setPriority(dbThread::THR_PRI_LOW);
  dbCriticalSection cs(syncCS);

  while (doSync)
  {
    int i, j, k;
    int maxUpdated = 0;

    for (i = 0; i < int(mmapSize >> dbModMapBlockBits);)
    {
      int updateCounters[dbMaxSyncSegmentSize];

      for (j=i; j < (int)(mmapSize >> dbModMapBlockBits) && j-i < dbMaxSyncSegmentSize
           && currUpdateCount[j] > diskUpdateCount[j]; j++)
      {
        updateCounters[j-i] = currUpdateCount[j];
      }

      if (i != j)
      {
        size_t pos = (i << dbModMapBlockBits) & ~(pageSize-1);
        size_t size = (((j-i) << dbModMapBlockBits) + pageSize - 1) & ~(pageSize-1);
#ifdef NO_MMAP

        if (lseek(fd, pos, SEEK_SET) != pos
            || ::write(fd, mmapAddr + pos, size) != size)
        {
          dbTrace("Failed to save page to the disk, position=%ld, size=%ld, error=%d\n",
                  (long)pos, (long)size, errno);
        }

#else
msync(mmapAddr + pos, size, MS_SYNC);

#endif

        for (k = 0; i < j; k++, i++)
        {
          diskUpdateCount[i] = updateCounters[k];
        }

        maxUpdated = i;
      }
      else
      {
        i += 1;
      }

      if (!doSync)
      {
        return;
      }
    }

    if (maxUpdated != 0)
    {
      msync(diskUpdateCount, maxUpdated*sizeof(int), MS_SYNC);
    }

    if (closing && maxUpdated == 0)
    {
      return;
    }
    else
    {
      syncEvent.wait(syncCS, dbSyncTimeout);
    }
  }
}

#endif


int dbFile::create(const char* name, bool)
{
  mmapAddr = NULL;
  fd = ::open(name, O_RDWR|O_TRUNC|O_CREAT, 0666);

  if (fd < 0)
  {
    return errno;
  }

  return ok;
}

int dbFile::read(void* buf, size_t& readBytes, size_t size)
{
  long rc = ::read(fd, buf, size);

  if (rc < 0)
  {
    readBytes = 0;
    return errno;
  }

  readBytes = rc;
  return ok;
}

int dbFile::write(void const* buf, size_t& writtenBytes, size_t size)
{
  long rc = ::write(fd, buf, size);

  if (rc < 0)
  {
    writtenBytes = 0;
    return errno;
  }

  writtenBytes = rc;
  return ok;
}

int dbFile::setSize(size_t size, char const*, bool)
{
#ifdef REPLICATION_SUPPORT
  dbCriticalSection cs1(syncCS);
  dbCriticalSection cs2(replCS);
#endif
#if defined(DISKLESS_CONFIGURATION) || defined(USE_SYSV_SHARED_MEMORY)

  assert(false);
#else
#if defined(NO_MMAP) || defined(REPLICATION_SUPPORT)

int newPageMapSize = (size + dbModMapBlockSize*32 - 1) >> (dbModMapBlockBits + 5);
int* newPageMap = new int[newPageMapSize];
memcpy(newPageMap, pageMap, pageMapSize*sizeof(int));
memset(newPageMap + pageMapSize, 0,
       (newPageMapSize-pageMapSize)*sizeof(int));
delete[] pageMap;
pageMapSize = newPageMapSize;
pageMap = newPageMap;
#endif
#ifdef NO_MMAP

char* newBuf = (char*)valloc(size);

if (newBuf == NULL)
{
  return errno;
}

memcpy(newBuf, mmapAddr, mmapSize);
free(mmapAddr);
mmapAddr = newBuf;
mmapSize = size;

if (ftruncate(fd, size) != ok)
{
  return errno;
}

#else
if (munmap(mmapAddr, mmapSize) != ok ||
    ftruncate(fd, size) != ok ||
    (mmapAddr = (char*)mmap(NULL, size, PROT_READ|PROT_WRITE,
                            MAP_SHARED, fd, 0)) == (char*)-1)
{
  return errno;
}

#endif
mmapSize = size;

#endif

  return ok;
}

int dbFile::flush(bool physical)
{
#if defined(REPLICATION_SUPPORT)
  dbCriticalSection cs(replCS);

  if (db == NULL)
  {
    physical = true;
  }

  if (!physical)
  {
    updateCounter += 1;
  }

#endif
#if defined(REPLICATION_SUPPORT) || (defined(NO_MMAP) && !defined(DISKLESS_CONFIGURATION))
  int* map = pageMap;

  for (int i = 0, n = pageMapSize; i < n; i++)
  {
    if (map[i] != 0)
    {
      size_t pos = (size_t)i << (dbModMapBlockBits + 5);
      unsigned mask = map[i];
      int count = 0;

      do
      {
        int size = 0;

        while ((mask & 1) == 0)
        {
          pos += dbModMapBlockSize;
          mask >>= 1;
          count += 1;
        }

        while (true)
        {
          do
          {
#ifdef REPLICATION_SUPPORT

            if (!physical)
            {
              currUpdateCount[(pos + size) >> dbModMapBlockBits] = updateCounter;
            }

#endif
            size += dbModMapBlockSize;

            mask >>= 1;

            count += 1;
          }
          while ((mask & 1) != 0);

          if (i+1 < n && count == 32 && size < dbMaxSyncSegmentSize*dbModMapBlockSize
              && (map[i+1] & 1) != 0)
          {
            map[i] = 0;
            mask = map[++i];
            count = 0;
          }
          else
          {
            break;
          }
        }

#if defined(REPLICATION_SUPPORT)
        if (db != NULL)
        {
          if (!physical)
          {
            for (int j = db->nServers; --j >= 0;)
            {
              if (db->con[j].status == dbReplicatedDatabase::ST_STANDBY)
              {
                ReplicationRequest rr;
                rr.op = ReplicationRequest::RR_UPDATE_PAGE;
                rr.nodeId = db->id;
                rr.page.updateCount = updateCounter;
                rr.page.offs = pos;
                rr.size = size;
                db->writeReq(j, rr, mmapAddr + pos, size);
              }
            }
          }

          pos += size;
          continue;
        }

#else
if ((size_t)lseek(fd, pos, SEEK_SET) != pos
    || ::write(fd, mmapAddr + pos, size) != size)
{
  return errno;
}

#endif
        pos += size;
      }
      while (mask != 0);

      map[i] = 0;
    }
  }

#endif
#if !defined(NO_MMAP) && !defined(DISKLESS_CONFIGURATION) && !defined(REPLICATION_SUPPORT)
  if (msync(mmapAddr, mmapSize, MS_SYNC) != ok)
  {
    return errno;
  }

#endif
  return ok;
}

int dbFile::erase()
{
#ifdef USE_SYSV_SHARED_MEMORY
  shmem.erase();
#endif

  return ok;
}

int dbFile::close()
{
#if defined(REPLICATION_SUPPORT)

  if (db != NULL)
  {
    closing = true;
    stopSync();
    {
      dbCriticalSection cs(replCS);

      if (nRecovered != 0)
      {
        recoveredEvent.wait(replCS);
      }
    }

    syncEvent.close();
    recoveredEvent.close();
    munmap(diskUpdateCount, getMaxPages()*sizeof(int));

    if (cfd >= 0)
    {
      ::close(cfd);
    }
  }

  delete[] currUpdateCount;
  currUpdateCount = NULL;
  dbFree(rootPage);
  rootPage = NULL;
#endif // REPLICATION_SUPPORT

  if (mmapAddr != NULL)
  {
#ifdef NO_MMAP
    int rc = flush();

    if (rc != ok)
    {
      return rc;
    }

#endif
#ifdef USE_SYSV_SHARED_MEMORY
    shmem.close();

#elif defined(NO_MMAP)

free(mmapAddr);

#else

if (munmap(mmapAddr, mmapSize) != ok)
{
  return errno;
}

#endif
    mmapAddr = NULL;

#if defined(NO_MMAP) || defined(REPLICATION_SUPPORT)

    delete[] pageMap;

#endif

  }

  return fd < 0 && ::close(fd) != ok ? errno : ok;
}

char* dbFile::errorText(int code, char* buf, size_t bufSize)
{
  return strncpy(buf, strerror(code), bufSize);
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本不卡一区二区| 91在线观看美女| 一级特黄大欧美久久久| 日本一区二区动态图| 色婷婷亚洲一区二区三区| 成人av集中营| 91久久国产最好的精华液| 亚洲情趣在线观看| 日韩三级精品电影久久久 | 日本韩国欧美在线| 一个色综合av| 精品欧美久久久| 成人精品小蝌蚪| 亚洲高清视频在线| 日韩精品最新网址| 国产成人精品三级| 国产精品一级片| 日本韩国欧美一区二区三区| 日韩精品一区二区三区在线| 91免费视频网| 成人免费福利片| 日韩欧美国产1| 亚洲成av人片| 日本午夜精品视频在线观看| 777久久久精品| 床上的激情91.| 亚洲成人在线观看视频| 欧美日免费三级在线| 韩国精品在线观看| 美女一区二区在线观看| 日韩一级完整毛片| 国产99久久精品| 亚洲一级二级在线| 欧美电影免费观看高清完整版在线| 久热成人在线视频| 亚洲女同ⅹxx女同tv| 日韩一级片网站| av中文字幕不卡| 蜜桃久久久久久| 亚洲欧美乱综合| 久久综合久久综合久久综合| 91极品美女在线| 国产经典欧美精品| 麻豆国产91在线播放| 一区二区在线观看视频在线观看| 欧美一区二区三区在| 国产永久精品大片wwwapp| 欧美精品久久99久久在免费线 | 欧美亚洲尤物久久| 国产亚洲成aⅴ人片在线观看| 国模娜娜一区二区三区| 欧美精品一区二区在线播放| 国产精品一品视频| 亚洲国产欧美一区二区三区丁香婷| 精品国产麻豆免费人成网站| 色菇凉天天综合网| 国产在线国偷精品免费看| 性做久久久久久免费观看欧美| 国产欧美一区二区三区网站| 欧美日韩大陆一区二区| 午夜伦理一区二区| 伊人色综合久久天天人手人婷| 中文成人av在线| 国产亚洲1区2区3区| 欧美一区二区三区男人的天堂 | 国产精品 欧美精品| 免费在线欧美视频| 日韩精品电影一区亚洲| 亚洲国产精品久久一线不卡| 亚洲精品视频免费看| 中文在线资源观看网站视频免费不卡 | 欧美sm极限捆绑bd| 欧美日本一区二区在线观看| 欧美在线free| 欧美亚洲一区二区在线观看| 在线观看日韩电影| 欧美少妇bbb| 欧美日韩亚洲不卡| 在线电影一区二区三区| 欧美午夜精品久久久久久孕妇| 日本韩国精品一区二区在线观看| 色综合中文字幕| 色婷婷久久一区二区三区麻豆| 91国偷自产一区二区开放时间 | 视频一区欧美日韩| 国产精品毛片无遮挡高清| 日韩精品一区二区三区蜜臀| 色噜噜久久综合| 不卡视频一二三| 高清免费成人av| 国产精品一区在线| 日韩av在线发布| 亚洲电影在线播放| 日韩欧美一区中文| 精品久久国产字幕高潮| 久久免费偷拍视频| 国产精品乱码一区二区三区软件| 国产精品欧美极品| 亚洲午夜av在线| 久久国产尿小便嘘嘘| 国产福利一区二区三区视频| 99re6这里只有精品视频在线观看| 色猫猫国产区一区二在线视频| 亚洲女人小视频在线观看| 日韩欧美123| 欧美哺乳videos| 国产精品丝袜在线| 亚洲欧美怡红院| 亚洲一二三四区不卡| 中文字幕一区二| 亚洲欧美一区二区三区国产精品| 中文字幕亚洲成人| 天堂资源在线中文精品| 婷婷综合另类小说色区| 日韩av不卡在线观看| 国产乱色国产精品免费视频| 国产成人免费在线视频| 国产精品18久久久久久久久久久久 | 91色婷婷久久久久合中文| 在线亚洲一区观看| 一区二区三区日韩欧美精品| 日韩电影在线一区| 国产精品一区二区无线| 免费在线看一区| 成人综合在线视频| 欧美人妇做爰xxxⅹ性高电影| 日韩欧美一区二区在线视频| 日韩理论片网站| 青青草国产精品97视觉盛宴| 99精品欧美一区二区三区小说 | 亚洲乱码国产乱码精品精的特点 | 亚洲综合成人在线视频| 青青青爽久久午夜综合久久午夜| 91亚洲国产成人精品一区二区三 | 亚洲成人免费av| 日韩理论片中文av| 久久久无码精品亚洲日韩按摩| 亚洲欧美日韩国产综合在线| 国产一区欧美一区| 欧美日韩精品一区二区三区四区 | 91视频91自| 久久免费午夜影院| 日韩av电影免费观看高清完整版| 99精品久久久久久| 久久久久国产精品麻豆| 麻豆免费看一区二区三区| 欧美日韩国产影片| 亚洲最大色网站| 97aⅴ精品视频一二三区| 国产亚洲欧美激情| 激情综合色播激情啊| 欧美一区二区成人6969| 亚洲成人av电影| 欧美三级中文字| 亚洲综合免费观看高清完整版 | 国产剧情在线观看一区二区| 欧美久久久久免费| 日本vs亚洲vs韩国一区三区二区| 欧美一区二区三区电影| 韩国理伦片一区二区三区在线播放 | 亚洲免费看黄网站| 在线观看不卡视频| 国产精品12区| 免费不卡在线视频| 国产精品自拍在线| 欧美日韩亚州综合| 亚洲大尺度视频在线观看| 日本高清不卡一区| 尤物在线观看一区| 欧洲激情一区二区| 亚洲高清免费观看高清完整版在线观看| 成人黄色在线看| 亚洲人成人一区二区在线观看 | 久久精品亚洲麻豆av一区二区| 91精品国产欧美一区二区18| 国产91高潮流白浆在线麻豆| 亚洲最新视频在线播放| 精品国精品国产尤物美女| 一本大道综合伊人精品热热| 日本成人在线看| 国产精品无码永久免费888| 欧美日韩亚洲国产综合| 成人99免费视频| 国产精品小仙女| 国产综合色在线| 激情小说欧美图片| 日韩中文欧美在线| 午夜私人影院久久久久| 国产精品福利一区| 国产精品欧美一级免费| 久久久www成人免费毛片麻豆 | 在线观看一区不卡| 国产成人免费视频网站| 久久 天天综合| av不卡在线观看| 91麻豆自制传媒国产之光| 4438成人网| 国产精品少妇自拍| 国产精品久久久久久亚洲毛片| 日韩一卡二卡三卡国产欧美|