实验四
一、实验目的
1、理解Linux文件系统的内部技术,掌握Linux与文件有关的系统调用命令,并在此基础上建立面向随机检索的hash结构文件。
2、Linux系统保持UNIX文件系统的风格,提供流式文件界面,这种结构具有简洁灵活的特点,但并不直接支持记录式文件和关键字检索。本实验是在Linux文件系统基础上,设计一组库函数,以提供对随机检索的支持。
二、实验内容
1、参考教材中hash文件构造算法,设计一组hash文件函数,包括hash文件创建、打开、关闭、读、写等。
2、编写一个测试程序,通过记录保存、查找、删除等操作,检查上述hash文件是否实现相关功能。
三、实验准备
1、教程Hash文件核心算法,包括记录保存、记录查找、记录删除等。
2、教程Linux系统有关文件的系统调用命令:creat,open,close,read,write,lseek。
四、实验设计
1、由于在Linux系统核心之外模拟实现hash文件,有关hash文件的说明信息不能保存 在inode中,而只能记录在文件的头部。这些信息包括hash文件标志、记录大小、文件 长度、记录数量等。
2、可以根据hash文件核心算法设计内部函数,包括记录的保存、查找、删除等,在此 基础上实现读、写等常规操作。
五、实验源码
//hashfile.h
#include<unistd.h>
#include<sys/stat.h>
#define COLLISIONFACTOR 0.5
struct HashFileHeader
{
int sig; //Hash文件印鉴
int reclen; //记录长度
int total_rec_num; //总记录数
int current_rec_num; //当前记录数
};
struct CFTag
{
char collision; //冲突计数
char free; //空闲标志
};
int hashfile_creat(const char *filename,mode_t mode,int reclen,int total_rec_num);
//int hashfile_open(const char *filename,int flags);
int hashfile_open(const char *filename,int flags,mode_t mode);
int hashfile_close(int fd);
int hashfile_read(int fd,int keyoffset,int keylen,void *buf);
int hashfile_write(int fd,int keyoffset,int keylen,void *buf);
int hashfile_delrec(int fd,int keyoffset,int keylen,void *buf);
int hashfile_findrec(int fd,int keyoffset,int keylen,void *buf);
int hashfile_saverec(int fd,int keyoffset,int keylen,void *buf);