已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
东莞理工学院城市学院计算机操作系统课程设计题目: 基于Linux的二级文件系统 专业: 软件工程 年级: 2012级软工3班 小组成员: 指导教师: 时间: 2014.12.24 2014.12.26 地点: 东莞理工学院城市学院计算机与信息科学系制2014年 12 月摘要本系统是基于linux平台运行在终端上的虚拟二级文件管理系统。模拟真正的文件管理系统,并采用用户登录机制对文件和文件夹进行创建,修改,删除的操作。对于文件夹而言,可以进行创建删除的操作;对于文件而言,可以创建,修改,删除。删除文件夹时,同时删除相应文件夹下的文件。采用用户登录使得用户管理文件更方便,并形成了二级的文件管理模式。目录1.概述32.课程设计任务及要求52.1 设计任务5工作进度表5组员分工52.2 设计要求53.算法及数据结构63.1算法的总体思想(流程)63.1.1用户63.1.2文件夹63.1.3文件63.2用户模块63.2.1 功能63.2.2 数据结构63.2.3 算法63.3、文件夹模块73.3.1功能73.3.2 数据结构73.3.3算法73.4文件模块73.4.1功能73.4.2数据结构73.4.3算法84.程序设计与实现84.1 程序流程图84.2部分子模块程序流程图94.2 部分程序代码124.3 实验结果155.结论176.收获、体会和建议187.参考文献181.概述本系统是基于linux平台运行在终端上的虚拟二级文件管理系统。模拟真正的文件管理系统,并采用用户登录机制对文件和文件夹进行创建,修改,删除的操作。对于文件夹而言,可以进行创建删除的操作;对于文件而言,可以创建,修改,删除。删除文件夹时,同时删除相应文件夹下的文件。采用用户登录使得用户管理文件更方便,并形成了二级的文件管理模式。2.课程设计任务及要求2.1 设计任务虚拟二级文件管理系统,采用用户登录机制,可以查看文件信息,管理文件及文件夹。工作进度表时间完成工作完成人周三下午完成课程设计的需求分析魏为康、罗雷同周四上午查找资料并编写代码魏为康、罗雷同周四下午共同讨论并优化代码以及测试魏为康、罗雷同周五上午画出流程图、部分文档整理魏为康、罗雷同周五下午编写课程设计与心得体会魏为康、罗雷同组员分工罗雷同魏为康1、 设计并编写代码与测试2、 编写课程设计报告和心得体会;3、 画出流程图4、 和队友共同讨论并优化算法1、设计并编写代码与测试2、编写课程设计报告和心得体会;3、画出流程图4、和队友共同讨论并优化算法2.2 设计要求使用如下命令对文件和文件夹进行管理dir : 列出所有文件信息cd - : 列出文件夹下的文件和子文件夹cfile : 创建新文件cfloder : 创建新文件夹read :读文件内容write :重写文件内容deli : 删除文件delo : 删除文件夹,若有子文件,一并删除exit : 退出系统3.算法及数据结构3.1算法的总体思想(流程)3.1.1用户本系统最大用户数量为5,将用户信息保存在文件user中,通过init()函数将用户信息赋给user数组。3.1.2文件夹设定头指针,在保存文件夹信息的文件folder中读取数据,通过initFloder()赋值给文件夹链表。3.1.3文件与文件夹类似,在保存文件信息的文件file中读取数据,通过initFile()赋值给文件链表。3.2用户模块3.2.1 功能 此模块处理用户登录系统和推出系统的管理,涉及到的操作函数主要有login()和logout().3.2.2 数据结构struct userchar name20;char pwd10;/struct folder *userFolder;firstUserMAXUSER;3.2.3 算法 函数名:login 功能:用户登录文件系统 算法:根据输入的用户和密码,判断用户验证信息是否正确,假如正确则登录到系统主界面。3.3、文件夹模块3.3.1功能 创建文件:在当前目录下创建文件。 删除文件:根据文件名删除文件。3.3.2 数据结构struct folderchar folderOwnerFname;/所属用户char parentFolderFname;char folderNameFname;/文件夹名称struct folder *next;3.3.3算法 Cdir()函数:判断要改变的目录是否当前目录,是则不改变,判断要改变的目录是否为根目录,若是判断当前目录是否为根目录,是则返回,不是则查找根目录存放地址,取得根目录i节点号,释放当前文件夹。3.4文件模块3.4.1功能 负责文件的创建、删除、打开关闭和读写。3.4.2数据结构struct filechar fileNameFname;int fileLength;char fileFolderFname;char fContentFLENGTH;struct file *next;3.4.3算法 Creat()函数:首先判断所要创建的文件名是否合法,不合法则给出错误提示,否则,判断在当前目录下是否存在相同的文件名,有则给出重名提示,否则初始化文件参数,为文件分配块并创建i节点。Delete()函数:根据当前路径查找是否存在该文件,不存在则给出提示信息,存在判断文件是否关闭,若未关闭则提示用户关闭文件,否则判断该用户是否是高级用户或该文件的创建用户,两者都不是则该用户无权删除该文件,释放该文件所占的块,释放i节点。Read()函数:形参为文件名和读文件的字节数,首先判断所读文件字节参数是否为数字,不是则给出提示信息并返回,否则判断多读字节是否超出文件大小,超出则读出所有文件内容。查找文件并取得i节点,若不存在则给出提示信息,存在判断文件是否已经打开,未打开或不是当前用户打开的文件则给出提示信息,要求用户打开文件,否则显示要读的信息。4.程序设计与实现4.1 程序流程图4.2部分子模块程序流程图(1)打开命令的程序流程图:(2)关闭命令的程序流程图:(3)写命令的程序流程图:(4)删除命令的程序流程图:4.2 部分程序代码#include #include #include #include #include #include #define BLOCKSIZ 512 /磁盘块的大小#define DATABLKNUM 512 /数据块的数目#define BLKGRUPNUM 50 /数据块组包含多少数据块#define P_N_BLOCKS 15 /inode节点中 指向数据块的指针个数#define GROUPNUM DATABLKNUM/BLKGRUPNUM+1 /数据块组 组数#define DINODESIZ 512 /磁盘i结点区的大小(空间32512)#define DINODENUM 32 /磁盘i结点区的块数#define SYSOPENFILE 40#define DIRNUM 32 /一个目录下的最多目录和文件的总和数#define DIRSIZ 14 /文件、目录名的长度(字节)#define UPWDSIZ 15 /秘密的长度#define UNAMSIZ 15 /用户名的长度#define PWDSIZ sizeof(struct pwd) /密码结构的长度 #define PWDNUM BLOCKSIZ/PWDSIZ /密码数据空间的大小(pwd为单位)#define NOFILE 20 /一个用户最多可以打开的文件数目#define NHINO 128#define USERNUM 10 /用户名的长度#define DINODESTART 4*BLOCKSIZ /i结点区的开始地址-inodes table ,1引导 2超块 3block bitmap 4inode bitmap#define DATASTART (2+DINODENUM)*BLOCKSIZ /数据区的开始地址#define DATASTARTNO 36 /数据区开始指针#define DIMODE_EMPTY 00000/*可以用的空间*/#define DIMODE_FILE 00001#define DIMODE_DIR 00002#define DIMODE_PASSWD 00004#define DIMODE_SYSTEM 00040 /*系统文件*/#define DIMODE_READ 00010 /* READ 和该数与操作后得到的是可以读该文件的用户组*/#define DIMODE_WRITE 00020 /* WRITE */#define DIMODE_EXICUTE 01000 /* EXICUTE */#define DIMODE_ADMIN 00100 /*管理员权限*/#define DIMODE_SHARE 00200 /*不需要权限*/*组*/#define GRUP_0 0 /管理员组#define GRUP_1 1#define GRUP_2 2#define GRUP_4 4/* 文件系统 数据结构 */ /*磁盘i结点结构,*/struct inode/ char di_nameDIRSIZ; unsigned _int16 di_ino; /*磁盘i节点标识*/ unsigned _int16 di_number; /*关联文件数,当为0时表示删除文件*/ unsigned _int16 di_mode; /*存取权限*/ unsigned _int16 di_uid; /*磁盘i节点用户id*/ unsigned _int16 di_gid; /*磁盘i节点权限组id*/ /1管理员组 2用户组 unsigned _int32 di_size; /*文件大小*/ unsigned _int32 di_ctime; /* Creation time */ unsigned _int32 di_mtime; /* Modification time */ unsigned _int16 di_blockP_N_BLOCKS; /* 一组 block 指针 */ ;/*目录项结构*/struct directchar d_nameDIRSIZ; /*目录名(14字节)*/_int16 d_ino; /*目录号*/;/*超级快结构*/struct super_blockunsigned _int16 s_inodes_count; /* inodes 计数 */unsigned _int16 s_blocks_count; /* blocks 计数 */unsigned _int16 s_r_blocks_count; /* 保留的 blocks 计数 */unsigned _int16 s_free_blocks_count; / 空闲的 blocks 计数unsigned _int16 s_free_inodes_count; /* 空闲的 inodes 计数 */unsigned _int16 s_free_blocks_groupGROUPNUM;/新增 一个数组来记录每个数据块组中的空闲数据块计数unsigned _int16 s_first_data_block; /* 第一个数据 block */unsigned _int16 s_log_block_size; /* block 的大小 */unsigned _int16 s_blocks_per_group; /* 每 block group 的 block 数量 */unsigned _int16 s_inodes_per_group; /* 每 block group 的 inode 数量 */;/*用户密码*/struct pwdunsigned _int8 p_uid;unsigned _int8 p_gid;char usernameUNAMSIZ;/*用户名 新加的*/char passwordUPWDSIZ;/*目录结构*/struct dirstruct direct directDIRNUM;_int16 size;/ 全局变量unsigned _int8 di_bitmapDINODENUM; / 硬盘inode节点位图 1表示已使用 0表示未使用unsigned _int8 bk_bitmapDATABLKNUM; / 数据块block位图 struct super_block filsys; /超级块struct pwd pwdPWDNUM;/struct user userUSERNUM;/int usernum;FILE *fd; /文件指针struct inode *cur_inode; /i节点当前目录指针/struct dinode *dinodef; /全局硬盘节点指针struct inode *inodetemp; /i节点指针/struct inode *inodetemp2;const char fsystemname20=Linux.EXT2; /模拟硬盘的文件名struct direct dir_bufBLOCKSIZ / sizeof(struct direct); /目录数组char cmdhead20;/cmd 的头 表示所在哪个文件夹 、int i_lock=0;/inode位图锁 可能会多线程int b_lock=0;/block位图锁struct pwd *cur_user;/* 全局函数 */extern int Format();/格式化磁盘extern int Install();/启动,安装文件系统 struct inode * read_inode(int);/install里面读取文件dinodestruct direct * read_dir_data(int);/读取存储文件夹的物理块4.3 实验结果(1)登录到主界面:(2)相关功能实现5.结论该课程设计无法通过模拟的方式在Linux环境下实现,必须通过创建内核来实现相关要求,内核经常需要在后台执行一些操作。这种任务可以通过内核线程完成,内核线程和普通的进程间的区别在于内核线程没有独立的地址空间,内核线程只在内核空间运行,从来不切换到用户空间去。内核进程和 普通进程一样,可以被调度,也可以被抢占,一般情况下,内核线程会将它在创建时得到的函数永远执行下去(除非系统重启)。改函数通常由一个循环构成,在需要的时候,这个内核线程就会被唤醒和执行吗,完成了当前任务,它会自行休眠。6.收获、体会和建议魏为康:通过两天半的课程设计明显了解了到了自己对LINUX操作系统的知识掌握还不够全面,在设计开展的过程中我查阅了大量相关资料,了解了大量的算法,通过对这些资料的收集和整理,再结合自身项目的特点,在C+中实现了部分模块功能,这次课程设计的体验也让我了解到了团队合作分工明确的重要性,也让我充分认识到自己这些方面还需要加强,在下次遇到类似的课程设计时一定会注意对任务的分配和工作流程的安排,在有限的时间内尽可能的完成更多,如果只是学习理论知识而不去实践,无论怎么说还是虚的东西,没有实际意义,所以我明白当学到理论知识之后就应该加以实践,加以巩固,这样才能更加获取和吸收化为自己的知识;还有了解到两种算法的作用,懂得了不同软件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年晋中市特岗教师笔试真题汇编附答案解析
- 2026江苏无锡口腔医院招聘考试参考题库含答案解析(夺冠)
- 2025通辽科左中旗招聘25名社区工作者备考题库附答案详解(达标题)
- 2025年中国能源建设集团安徽电力建设第二工程有限公司招聘10模拟试卷附答案
- 2025海南省粮食和物资储备集团有限公司第5次社会招聘5人备考题库及答案解析(夺冠)
- 2023年湖北省遴选公务员考试真题汇编带答案解析
- 2025年秋季贵州黔西南州普晴国有林场赴省内外高校引进高层次人才和急需紧缺人才1人考试参考题库附答案解析
- 2025兴业银行招聘电话催收人员若干人笔试备考试卷附答案解析(夺冠)
- 2025中国科学院软件研究所财务资产处岗位招聘1人备考题库附答案
- 2025新疆生产建设兵团第五师双河市医共体成员单位招聘编制备案制人员12人考试模拟卷附答案解析
- 中国艺术歌曲赏析及实践知到课后答案智慧树章节测试答案2025年春四川音乐学院
- 免交社保合同范例
- 体育行业:体育教练简历
- 人工智能在口腔种植体周围炎诊断中的应用-深度研究
- 全国公开课一等奖七年级生物上册(人教2024年新编)《细菌》精美课件
- 改革开放与新时代知到智慧树章节测试课后答案2024年秋同济大学
- 【考研英语】2021年12月上海外国语大学研究生招生考试英语练习题100道(附答案解析)
- 泵站值守劳务合同范例
- 部编版语文一年级上册第七单元教材解读大单元集体备课
- 20世纪外国文学史绪论
- 汽车吊安全教育培训
评论
0/150
提交评论