ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:229.80KB ,
资源ID:616420      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/616420.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统 实验报告 文件管理.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统 实验报告 文件管理.docx

1、操作系统 实验报告 文件管理昆明理工大学信息工程与自动化学院学生实验报告( 201 201 学年 第 二 学期 )课程名称:操作系统 开课实验室: 年 月 日年级、专业、班 学号 姓名 成绩实验项目名称文件管理指导教师 教师评语 教师签名: 年 月 日一、实验目的用C或C+语言编写和调试一个简单的文件系统,模拟文件管理的基本功能。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。二、实验原理及基本技术路线图(方框原理图)用C模拟实现文件系统的管理;要求设计一个多级目录结构的文件系统,能正确描述文件控制块,采用合理的外存分配方式,能实现基本的目录及文件的操作,包括创建、删除、重命名、复

2、制、移动等功能,并对文件有一定的存取权限控制。功能设计 : Help 显示命令帮助 dir 显示当前目录下的文件和文件夹 exit 退出系统 create 文件名 创建文本文件 cdir 目录名 创建文件夹 read 文件名 读取一个文件最多可同时读取五个 close文件名 关闭一个文件 edit 文件名 编辑一个文件 cd 目录名 进子目录或者上级目录 attr 文件名 显示该文件的属性 del 文件名 删除文件 rename 文件名 重命名 编辑功能流程图 删除文件流程图 创建文件流程图核心算法: bool Format(void); /格式化 bool install(void); /装

3、载虚拟硬盘的数据 void login(void); /用户登陆 void showMenu(void);/显示功能菜单 bool onAction(void);/用户选择功能并执行 void createFile(string str);/创建文件 bool read(string str);/读取文件 void editFile(string str);/编辑文件 void Delete(string str);/删除一个文件数据结构: /*-常变量-*/ const unsigned int BLOCK_SIZE=512; /块长 const unsigned int DATA_BLOC

4、K_NUM=512; /数据块数量 const unsigned int DINODE_START=4*BLOCK_SIZE; /inode起始位置 const unsigned int DINODE_SIZE=512; /inode大小 const unsigned int DINODE_NUM=32; /inode数量 const unsigned int DATASTART=(2+DINODE_NUM)*BLOCK_SIZE; /数据区的开始地址 const unsigned int ACCOUNT_NUM=10; /用户数量 /*inode结构体*/ struct inode unsi

5、gned short di_tag; /*inode标识*/ unsigned short di_number; /*关联文件数,当为0时表示删除文件,如一个目录至少 包含两个文件:.和.*/ unsigned short di_mode; /*存取模式:0为目录,1为文件*/ unsigned short di_userID; /*当前inode所属用户 0为根目录ID,一次下去是管理员目 录、用户目录*/ unsigned short di_access; /*访问权限 0为不允许普通用户访问(公共目录),1为允许 普通用户访问*/ unsigned short di_size; /*文件

6、大小,目录没有大小,值为0*/ unsigned short di_ctime; /* 创建时间 */ unsigned short di_mtime; /* 最后一次修改时间*/ unsigned short di_blockDATA_BLOCK_NUM; /* 数据块块地址编号 */;/*超级块*/struct super_block unsigned short s_inodes_count; /* 文件系统中inode的总数 */ unsigned short s_blocks_count; /* 数据块总数 */ unsigned short s_r_blocks_count; /*

7、 保留块总数 */ unsigned short s_free_blocks_count; / 空闲块总数 unsigned short s_free_inodes_count; /* 空闲的inode总数 */ unsigned short s_log_block_size; /* block 的大小 */;/*账户信息*/struct user unsigned short user_id; /用户ID unsigned short user_access; /权限 string username; /用户名 string password; /密码;/*文件/目录结构*/struct d

8、irectory string name; /*目录名*/ unsigned short d_ino; /*目录号*/;三、所用仪器、材料(设备名称、型号、规格等)。计算机一台四、实验方法、步骤#include #include#include#includestruct OpenFileTable /打开文件表数据结构 long offset; / 当前文件读写指针 char file_name10; / 文件名数组 long int file_start; / 文件起始块号 long int file_length; / 文件长度(字节);struct FCB_Block /FCB数据结构

9、 int flag; / 标志,-1表示未用,1表示文件用 char file_name10; / 文件名数组 long int file_date; / 文件建立日期 long int file_time; / 文件建立时间 long int file_start; / 文件起始块号 long int file_length; / 文件长度(字节);struct Super_Block / 超级块数据结构, 文件系统的分区信息,存放在0#物理块中 unsigned long int fs_totalsize; / 整个分区的总磁盘物理块数 unsigned long int fs_frees

10、ize; / 分区的所有空闲磁盘物理块数 unsigned int fs_blocksize; / 文件系统的物理块大小(字节) unsigned int fs_fat_start; / FAT的起始磁盘物理块号 unsigned int fs_fat_size; / FAT占用的磁盘物理块数 unsigned int fs_dir_start; / 根目录的起始磁盘物理块号 unsigned int fs_dir_size; / 根目录占用的磁盘物理块数 unsigned int fs_data_start; / 数据区起始磁盘物理块号 unsigned long int fs_data_s

11、ize; / 数据区的磁盘物理块数 ;const char DiskName=FileSys.dat; /磁盘文件名char rw_buffer512; / 读写使用的缓冲区struct FCB_Block filefcb130; / 读写目录使用的数据结构struct Super_Block FsSupBlk; / 读写超级块使用的数据结构long int fat_buffer5000; / 读写FAT使用的缓冲区,为简化在系统启动时全部装入内存,0为空闲struct OpenFileTable OFT16; / 打开文件表,当前只使用OFT0unsigned int block_size;

12、 / 物理块大小(字节)unsigned long int total_disk_size; / 磁盘总容量(物理块数)unsigned int total_dir_size; / 目录占有的物理块数unsigned int total_fat_size; / FAT占有的物理块数long int find_fcb; / 记录读FCB块的次数FILE *fsPtr; / 模拟磁盘的文件指针/* 磁盘块的申请*/ unsigned long int Get_Block(unsigned long int count) /分配count个物理快,返回首块指针,其它已经连接 unsigned lon

13、g int tmp,firstblk,tmpcount; unsigned long int i; int flag=1; if (count FsSupBlk.fs_freesize) printf( = 没有足够磁盘容量,不能分配!= n); return 0; tmpcount=0; for(i=FsSupBlk.fs_data_start;i=FsSupBlk.fs_totalsize;i+)/建立分配链 if(fat_bufferi = 0) /文件未占有,分配 if (flag=1) firstblk=i; flag=-1; else fat_buffertmp=i; tmp=i; fat_bufferi=-1; tmpcount+; if(tmpcount=count) /分配完成 FsSupBlk.fs_freesize=FsSupBlk.fs_freesize-count;/减少可分配物理块 return firstblk; return -1; /分配不成功/* 磁盘块的回收*/ void Put_Block(unsigned long int addr) unsigned long int i,j; int count; i=addr; count=0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1