把INODE inode写回指定的i结点
2.对盘块的操作;用的是成组链接法。(n#盘块 读指针应定位到514*n)
int balloc(void);
申请一个盘块 返回盘块号 否则返回-1
void bfree(int index);
指定一个盘块号,回收一个盘块
3.对超块的操作;
void readsuper(void);
读超块到内存SUPERBLOCK superblock;
void writesuper(void);
内存SUPERBLOCK superblock;写回超块
4.对目录项的操作( n#目录项读指针应定位514*index+36*n )
便
操作系统 模拟linux文件管理系统
void readdir(INODE inode,int index,DIR &dir);
读指定目录项进临时对象DIR dir;
void writedir(INODE inode,DIR dir,int index);
目录项对象DIR dir写到指定目录项
4.initial.h:
是定义初始化函数的模块
其中包括了对用户组的初始化:定义三个用户adm,cnj和jtq,其中adm,cnj的组为adm,jtq的组为guest。用户的初始密码都为123。对超块的(0#盘块)初始化 、对根目录文件结点(0#结点)的初始化 、对数据盘块的初始化。
erop.h:
定义了两个功能函数:
1.登陆 bool login(void); 要求输入用户信息,并判断是否合法。
2.改变用户密码 void changepassword(void); 改变当前用户的密码。
6. file.h:
定义了有关文件操作的四个函数
1.创建文件void mk(char *dirname,char *content);
当前目录下创建一个数据文件(规定目录文件只占1 ~ 4个盘块)。虽然不要求这个函数,但我觉得很有必要。而且,因为我使用了两个参数,前一个表示文件名,后一个表示文件内容,可以在文件拷贝里使用这个函数。
2.删除文件void rm(char *filename);
当前目录下删除指定数据文件
3.文件拷贝void cp(char*string);
给定一个路径,把那个文件拷贝到当前目录下。首先要使用dir.h里面根据路径找到目标的函数(find(char*string))找到对应文件,如果是数据文件的话,记录文件内容到一缓冲区,然后在当前目录下调用创建目录的函数,就完成了。
4.显示文件内容void cat(char *filename);
显示当前目录下指定数据文件的内容。
操作系统 模拟linux文件管理系统
7. dir.h:
定义两个底层函数
1.bool havesame(char *dirname,INODE inode,int &i,int &index2)
判断对象inode指向的目录文件盘块中有无该名(dirname)的目录项存在着,有返回1无返回0。同时,有该目录项的话,则按引用调用的i为待删子目录目录项下标 index2为目录项中的待删子目录的结点号
2.bool find(char *string)
根据路径找到指定文件或目录<路径至少有一个 / 以root开头,不以 / 结尾>。需要注意的是,使用此函数时当前路径跟着改掉了,所以使用前必须保存当前路径。万一找不到目标的话,可以还原为当前路径。
定义了有关目录操作的四个功能函数,
1.void mkdir(char *dirname)
当前目录下创建目录(规定目录文件只占一个盘块。为了降低难度,已设定目录文件只占一个盘块。
2.void rmdir(char *dirname,int index)
当前目录下删除目录。将要删除的目录可能非空。有两种策略:一、规定只能删除空目录。
二、递归地将非空目录的所有子目录删除,让后再删除自己。第一种实现较简单,我使用了第二种策略。所以参数为 (子目录名,当前结点)。如果使用第一种策略的话,参数为只要子目录名就可以了。
3.void ls(void)
显示当前结点的所有子目录
4.void cd(char *string)
改变当前目录。有四中处理过程: string为“.”切换到当前目录;为“..”
切换到父目录 ;为“/”切换到根目录;如果为一路径的话,就调用bool find(char *string) 切换到指定目录。
8. chsome.h
:
定义一个底层函数:
操作系统 模拟linux文件管理系统
bool havewpower(INODE inode)
判断当前用户对指定的结点有无写权限
定义四个功能函数:
1.void chmod(char *name)
改变当前目录下指定文件的文件权限
2.void chown(char *name)
改变当前目录下指定文件的文件拥有者(如拥有者在另一个组,那么组也要改掉)
3.void chgrp(char *name)
改变当前目录下指定文件的文件所属组
4.void chnam(char *name)
改变当前目录下指定文件的文件名
mand.h:
命令解析层函数模块。接受用户命令,执行不同的操作。
四.命令格式及运行结果
一开始为登陆请求。可选用户为:adm cnj jtq 密码都是123
登陆后在根目录
1.
pwd
显示当前目录
2
.
mksome
创建
bin dev
等
操作系统 模拟linux文件管理系统
个目录
这是我自己为方便添加的功能,
2.
ls
显示当前目录下所有子目录
3.
mkdir
dirname
创建目录
4.
mk
filename
创建数据文件
5.
rmdir
dirname
删除目录
6
.
cd .
切换当前目录
基本没用处
cd ..
切换到父目录
cd
子目录名
操作系统 模拟linux文件管理系统
切换到子目录
cd /
切换到根目录
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说医药卫生操作系统大型试验(2)在线全文阅读。
相关推荐: