资源简介
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++语言写最长公共子序列问题
相关资源
- c++语言写最长公共子序列问题
- c++病毒
- C++ 超市管理系统
- DEV C++ 主题配色文件 Visual Studio 2017深
- 仿雷电射击游戏基于VC++MFC
- MFC连接SqlServer数据库,并将查询的数
- 三国杀c++游戏代码含注释
- 动态规划最短路径.cpp
- Mysql数据库语句、增删该查总结及MF
- C++版DS证据理论
- c++ 线程池 即用版
- 一定经纬范围的墨卡托投影.cpp
- 用C++实现的华容道游戏
- C++复习资料精华
- C++,链表,通讯录系统
- 算术编码c++170579
- 自适应哈夫曼编码C++
- C++从入门到精通第三版 清华大学出版
- 五子棋C++代码
- C++课设 简单的投票系统
- 计算机图形学VSC++生成时钟报告含代码
- 基于c++小型公司工资管理系统的设计
- 节约里程法c++实现
- C++学习路线视频全套
- Visual C++ 网络 流量 监控 系统
- C++ 矩阵类 实现常用的矩阵操作
- 计算机图形学直线段的扫描转换C++实
- 50道习题源程序.zip
- RTCM 3.0解码C++代码
- 批量16位图像转8位
评论
共有 条评论