操作系统大型试验(2)

2024-05-05

把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 /

切换到根目录


操作系统大型试验(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:基于技术进步的中国能源消耗与经济增长_前后两个30年的比较

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219