资源简介
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个文件信息
- 上一篇:超声波避障,光电测速,pwm综合应用
- 下一篇:c++语言写最长公共子序列问题
相关资源
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- Qt查询SQLite数据库
- C++17 In Detail
- QT SQLite封装
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
评论
共有 条评论