📄 最新说明.txt
字号:
文件系统的模拟实现
(请参阅文档: "设计说明书.sxw" 和 "旧的设计报告.sxw"(课程设计的报告)(用openoffice打开sxw文件).
(文档资源不够丰富, 请多多包涵)
大概如下:
(1)文件系统存储机构的总体安排
在第一次运行模拟程序时, 程序向操作系统申请建立一个件,命名为myfilesys.dat。
我们的文件系统就是建立在myfilesys.dat的存储空间中,文件系统的存储空间的安排如下:
我们定义一个磁盘块为1KB,一个磁盘块I节点为64字节。
因此,在我们的文件系统中,超级块的磁盘块地址为0,
I节点区的磁盘块地址为1~1024,即I节点区占用1024块。
文件存储区磁盘块地址为1025~2024,即文件存储区占用1000块。
(2)文件系统的主要模块组成原理
本文件系统主要包括两大模块:文件系统服务端模块和文件操作函数模块。
两大模块之间分别独立于不同的进程,它们之间进行进程间的通信。
因此,文件操作函数模块,相当于客户端,任何程序如果调用这些函数,
即可对本文件系统的文件操作.
(3)源代码的组成文件.
fs_server.c实现文件系统服务端模块,其包含头文件fs_server.h。
myfilelib.c 实现文件操作函数模块,其包含头文件myfilelib.h。
myshell.c 一个测试程序,其包含头文件myfilesys.h。
fs_server.c 被编译生成服务端可执行文件。
myfilelib.c被编译生成myfilelib.o目标文件,实现源代码的隐藏, 并提供给用户程序链接。
myshell.c相当于一个普通的用户程序,其调用myfilelib.o中的文件操作函数,调用文件系统的功能,对本模拟文件系统进行测试。
(4)编译和安装:
直接运行make命令即可.
Makefile 文件如下:
all: server myshell
@echo
@echo Building server and myshell is done
server: fs_server.c fs_server.h
gcc -o server fs_server.c
myshell: myfilelib.o myshell.c myfilesys.h
gcc -o myshell myfilelib.o myshell.c
myfilelib.o: myfilelib.c myfilelib.h
gcc -o myfilelib.o -c myfilelib.c
(5) 测试
程序myshell连接myfilelib.o里面的文件操作函数,对文件操作函数进行测试.
myshell提供ls, mkdir, cd , cat 四个命令来测试文件操作函数:
int Open(const char *pathname, int flags, ...);
int Read(int fd, char *buf, unsigned int nbytes);
int Write(int fd, char *buf, unsigned int nbytes);
void List(const char *pathname, int flag);
void mymkdir(const char *pathname);
int SearchDir(const char *pathname);
void Close(int fd);
void Over(void);
例子:
[root@localhost kcsjnodebug]# ./server& 运行服务端
[1] 4112
[root@localhost kcsjnodebug]# ./myshell 运行客户端
[myshell@/]$ls 列目录
.
..
[myshell@/]$mkdir dir1 创建目录dir1
[myshell@/]$ls
.
..
dir1
[myshell@/]$mkdir dir2 创建目录dir2
[myshell@/]$ls
.
..
dir1
dir2
[myshell@/]$cd dir1 进入目录dir1
[myshell@/dir1]$ls
.
..
[myshell@/dir1]$mkdir dir3 创建目录dir3
[myshell@/dir1]$ls
.
..
dir3
[myshell@/dir1]$cat > file1.txt 创建文件file1.txt
Infile1.txt 只能输入一行,而且不能有空格
[myshell@/dir1]$cat file1.txt 输出文件file1.txt的内容
Infile1.txt
[myshell@/dir1]$cd .. 退出目录dir1
[myshell@/]$ls
.
..
dir1
dir2
[myshell@/]$exit 退出测试程序
(6)已知错误
如果不正常中止程序server 或者 myshell。下次运行此两个程序前,
一定要先删掉/tmp/serv_fifo 和 /tmp/client_*_fifo 两个管道文件。
(*代表任意字符)
因为采用管道通信,如果不正常中止程序server 或者 myshell,就没有清除
此两管道文件。会导致下次启动失败。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -