- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统实验四
操作系统实验课 主讲人: 仲志成 实验四、文件系统 - Hash结构文件 实验目的 理解Linux文件系统的内部技术,掌握Linux与文件有关的系统调用命令,并在此基础上建立面向随机检索的hash结构文件。 Linux系统保持UNIX文件系统的风格,提供流式文件界面,这种结构具有简洁灵活的特点,但并不直接支持记录式文件和关键字检索。本实验是在Linux文件系统基础上,设计一组库函数,以提供对随机检索的支持。 实验内容 (1) 参考教材中hash文件构造算法,设计一组hash文件函数,包括hash文件创建、打开、关闭、读、写等。 (2) 编写一个测试程序,通过记录保存、查找、删除等操作,检查上述hash文件是否实现相关功能。 实验准备 (1)??? 原理教材Hash文件核心算法,包括记录保存、记录查找、记录删除等。 (2)??? 原理教材Linux系统有关文件的系统调用命令:create,open,close,read,write,lseek。 文件操作 打开文件open,创建文件creat 函数原型: #include sys/types.h #include sys/stat.h #include fcntl.h int open(const char *filename, int flags, mode_t mode); int creat(const char *filename, mode_t mode); 文件操作 open与creat的第一个参数filename为要打开或创建的文件名。open第二个参数flags。可以是O_RDONLY, O_WRONLY, O_RDWR, O_APPEND, O_CREAT, O_EXCL, O_TRUNC, O_NOCITY, O_NONBLOCK, O_SYNC的任意”|”结果。如:O_RDWR | O_APPEND | O_CREAT 文件操作 常见的flags常数: O_RDONLY: 只读 O_WRONLY: 只写 O_RDWR: 读写 O_APPEND: 追加 O_CREAT: 不存在文件的话创建新文件 O_EXCL: 如果文件存在则失败 O_TRUNC: 如果文件存在这则截断文件 O_NONBLOCK: 非阻塞IO。以后讲 文件操作 open和creat的最后一个参数mode指明创建文件的的访问权限。对于open而言,只有当flags中包含O_CREAT时mode参数才有效。 creat(filename, mode); 等价于: open(filename, O_WRONLY | O_CREAT | O_TRUNC, mode); 文件操作 open与creat会打开的文件描述字。当文件使用完毕,需调用close关闭文件。 close的原型如下: #include unistd.h int close(int filedes); 其中filedes为open或creat返回的文件描述字。 文件操作 读文件read与写文件write 函数原型: #include unistd.h ssize_t read(int filedes, void *buff, size_t nbytes); ssize_t write(int filedes, void *buff, size_t nbytes); 文件操作 filedes: 已打开的文件描述字 buff: 在read中为读出的数据存放的缓冲区;在write中为要写入的数据区。 nbytes: 读出或写入的字节数。 read和write返回成功读出的字节数。 文件操作 设置文件读写位置lseek 函数原型: #include sys/types.h #include unistd.h off_t lseek(int filedes, off_t offset, int whence); 参数whence指明offset是相对文件开始、文件尾还是当前位置,它可以是SEEK_SET, SEEK_CUR或SEEK_END之一。 文件操作 例如,把文件读写位置设置到文件尾: lseek(fd, 0, SEEK_END); 把文件读写位置设置到当前位置之前3个字节: lseek(fd, -3, SEEK_CUR); 实验设计 * * Hash结构: 计算地址: hash(key)=addr (在磁盘或文件中的存放位置) 问题:给定key1?key2 hash(key1)=addr1; hash(key2)=addr2;
原创力文档


文档评论(0)