• 大小: 97KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: C/C++
  • 标签: c++  sql  

资源简介

c++实现的sql基本功能 Linux,win下可运行 c++实现的sql基本功能 Linux,win下可运行

资源截图

代码片段和文件信息


#include “stdafx.h“
#include “buffer_manager.h“

using namespace std;

//CBufferManager m_ptheblocks[MAX_BLOCKS];
CBufferManager* CBufferManager::m_ptheblocks = NULL;


/*初始化buffer区,但不分配内存*/
void CBufferManager::initiate_blocks()
{
unsigned int i;
m_ptheblocks = new CBufferManager [MAX_BLOCKS];
for(i=0;i m_ptheblocks[i].m_address = NULL;
m_ptheblocks[i].m_index_table=0;
m_ptheblocks[i].m_is_written=0;
m_ptheblocks[i].m_being_used=0;
m_ptheblocks[i].m_count=0;
}
}

/*退出时调用,将所有需要写回的块数据写回相应文件,并释放buffer区*/
void CBufferManager::flush_all_blocks(){   
for(int i=0;i m_ptheblocks[i].flush_block();
if(m_ptheblocks[i].m_address != NULL)
delete [] m_ptheblocks[i].m_address;
}
}

/*使用块函数,buffer内部函数*/
void CBufferManager::using_block(unsigned int number)
{
unsigned int i;
m_ptheblocks[number].m_being_used=1;
for(i=0;i if(i!=number && !m_ptheblocks[number].m_being_used)
m_ptheblocks[i].m_count++;  //所有没正在使用的块count加1
else if(i==number)
m_ptheblocks[i].m_count=0;  //正在使用的块count置0,使正在被使用的块不被换出
}
}

/*找到count值最大的块号(即近似LRU算法中要求替换出的块),buffer内部函数*/
unsigned int CBufferManager::max_count_number()
{
unsigned int i;
unsigned int max_count=m_ptheblocks[0].m_count;
unsigned int block_number=0;
for(i=0;i if(m_ptheblocks[i].m_count>max_count){
max_count=m_ptheblocks[i].m_count;
block_number=i;
}
return block_number;
}

/*若该块需要写回,将该块的数据写回相应文件,换出时和退出时调用buffer内部函数*/
void CBufferManager::flush_block()
{
FILE *fp;
if(m_is_written && m_index_table) {
if(fp=fopen((LPCTSTR)m_name“rb+“)){  
fseek(fpBLOCK_SIZE*m_offset_number0);
fwrite(m_addressBLOCK_SIZE1fp);
fclose(fp);
}
}
}

/*为record manager和index manager提供块(写),在其初始建立时调用*/
unsigned int CBufferManager::get_blank_block(short int index_table)
{
unsigned int number;
unsigned int i;
char *p;
for(i=0;i if(!m_ptheblocks[i].m_index_table && !m_ptheblocks[i].m_being_used)
break;
if(i number=i;
m_ptheblocks[number].m_address = new char [BLOCK_SIZE];

        for(p=m_ptheblocks[number].m_address;p    *p=‘$‘;
}
else{ //表示无空块,须判断换出哪个块和是否有必要写回文件
number=max_count_number();
m_ptheblocks[number].flush_block();
}
using_block(number);
m_ptheblocks[number].m_index_table=index_table;
return number;
}

/*为record manager和index manager提供块(读或改)若在buffer中找不到则调用get_blank_block为其分配空间并做标记*/
unsigned int CBufferManager::get_block(short int index_table CString filename unsigned int offset_number)
{
FILE *fp;
unsigned int number;
unsigned int imark;

for(i=0;i if(m_ptheblocks[i].m_index_table==index_table && m_ptheblocks[i].m_name == filename && 
m_ptheblocks[i].m_offset_number==offset_number) { //表示在buffer中找到了该块
number=i;
using_block(number);
return

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-04-22 10:17  MiniSQL\
     文件        2685  2005-01-12 01:56  MiniSQL\catalog_manager.h
     目录           0  2018-04-22 11:09  __MACOSX\
     目录           0  2018-04-22 11:09  __MACOSX\MiniSQL\
     文件         175  2005-01-12 01:56  __MACOSX\MiniSQL\._catalog_manager.h
     文件       37447  2005-01-13 02:49  MiniSQL\interpret.cpp
     文件         175  2005-01-13 02:49  __MACOSX\MiniSQL\._interpret.cpp
     文件        1457  2005-01-09 13:26  MiniSQL\MiniSQL.rc
     文件         175  2005-01-09 13:26  __MACOSX\MiniSQL\._MiniSQL.rc
     文件        1106  2005-01-07 12:47  MiniSQL\StdAfx.h
     文件         175  2005-01-07 12:47  __MACOSX\MiniSQL\._StdAfx.h
     文件        3599  2005-01-09 21:40  MiniSQL\buffer_manager.cpp
     文件         175  2005-01-09 21:40  __MACOSX\MiniSQL\._buffer_manager.cpp
     文件        1251  2005-01-09 10:39  MiniSQL\index_manager.h
     文件         175  2005-01-09 10:39  __MACOSX\MiniSQL\._index_manager.h
     文件       19591  2005-01-09 10:59  MiniSQL\catalog_manager.cpp
     文件         175  2005-01-09 10:59  __MACOSX\MiniSQL\._catalog_manager.cpp
     文件       14825  2005-01-13 01:10  MiniSQL\record_manager.cpp
     文件         175  2005-01-13 01:10  __MACOSX\MiniSQL\._record_manager.cpp
     文件      107520  2005-01-13 05:09  MiniSQL\MiniSQL.ncb
     文件         175  2005-01-13 05:09  __MACOSX\MiniSQL\._MiniSQL.ncb
     文件        1229  2005-01-09 13:46  MiniSQL\buffer_manager.h
     文件         175  2005-01-09 13:46  __MACOSX\MiniSQL\._buffer_manager.h
     文件      192576  2005-01-13 04:53  MiniSQL\MiniSQL.exe
     文件         175  2005-01-13 04:53  __MACOSX\MiniSQL\._MiniSQL.exe
     文件        2985  2005-01-13 04:51  MiniSQL\MiniSQL.h
     文件         175  2005-01-13 04:51  __MACOSX\MiniSQL\._MiniSQL.h
     文件         748  2005-01-09 12:41  MiniSQL\record_manager.h
     文件         175  2005-01-09 12:41  __MACOSX\MiniSQL\._record_manager.h
     文件           8  2007-11-10 18:22  MiniSQL\tables.catlog
     文件         175  2007-11-10 18:22  __MACOSX\MiniSQL\._tables.catlog
............此处省略26个文件信息

评论

共有 条评论