您的位置:首页 > 职场人生

公司招聘软件研发程序员的一道考题--MS SQL Server数据库数据文件页面头部结构

2011-08-13 23:26 639 查看
有一次在招聘C++程序员时,出的一道考题,内容其实就是MS SQL Server数据库数据文件页面头部结构,如下:

有个file.a文件,这个文件以16sec[sec是扇区,每个sec包含512个Byte(字节)]为一个页进行分组并编号。

如:

文件的0-15sec(0-8191byte) 为第0页

文件的16-31sec(8192-16383byte) 为第1页

文件的32-47sec(16384-24575byte) 为第2页 以此类推

每个页的头96个字节结构如下:(注意:这里是每个页头部96Byte,1页大小是16 sec,8192 bytes)

struct mdfPageHeader //文件页头部结构

{

UINT8 m_headerVersion; //版本

UINT8 m_type; //页类型

UINT8 m_typeFlagBits;

UINT8 m_level;

UINT8 m_flagBits;

UINT8 m_reservedB;

UINT16 m_indexId;

UINT32 m_prevPage_id;

UINT16 m_prevPage_fid;

UINT16 pminlen;

UINT32 m_nextPage_id;

UINT16 m_nextPage_fid;

UINT16 m_slotCnt;

UINT32 m_objId; //所属对象ID

UINT16 m_freeCnt;

UINT16 m_freeData;

UINT32 m_pageId_id; //每页编号

UINT16 m_pageId_fid;

UINT16 m_reservedCnt;

UINT32 m_lsn_d1;

UINT32 m_lsn_d2;

UINT16 m_lsn_w1;

UINT16 m_xactReserved;

UINT32 m_xdesId_id;

UINT16 m_xdesId_fid;

UINT16 m_ghostRecCnt;

UINT32 m_tornBits;

UINT64 temp1;

UINT64 temp2;

UINT64 temp3;

UINT64 temp4;

};

用VC++完成下面编程:

把符合m_headerVersion==1、m_type==1、m_objId==1三个条件的页面(16sec)找出来,

并把这些页面按照查询先后顺序写到另一个文件file.b文件中。

提示:

打开和创建文件可以用下面两种方法来实现

1、CFile fileo,filew;

fileo.Open("file.a",CFile::modeRead|CFile::typeBinary);

filew.Open("file.b",CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);

2、HANDLE hFileA,hfileB;

hFileA = CreateFile(_T("file.a"),GENERIC_READ, FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);

hFileB = CreateFile(_T("file.b"),GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,0,NULL);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐