最近更新: 2006-07-01
本页目录
这是一个纯模拟性质的小型 UNIX 磁盘文件系统,实现了如下的一些功能:
Small UNIX Filesystem (download)
需要 gcc 来的编译,Win 下和 Linux 下都可以运行,终端显示。解压源码后,只 需进入源码目录,运行 make 就可以编译,运行二进制码即可,也可以加一个参数, 给定文件名作为磁盘。源码内的 README 也有详细的使用说明。
编译出现 “warning: integer overflow” 是因为磁盘文件系统采用了 UNIX 的混合 分配方式,其多次间接寻址的数值超过了一个 int 的表示范围,但是在这个程序的 实际使用上是不会有这样的情况的。
运行程序后即进入了小型的模拟 shell,进入了 根 目录,同时程序列出了模拟 shell 支持的命令,大部分跟 UNIX 或是 Linux 下的命令相仿,加了括号的参数 意味着有默认值,如下:
命令 | 参数 | 描述 |
---|---|---|
exit | 无 | 离开程序 |
echo | 无空格分割的单词 | 打印单词 |
help | 无 | 打印这个帮助 |
mkdir | 目录名 | 建立目录 |
mkfile | 文件 (大小) | 建立指定大小的文件,不指定的默认为空(0) |
ls | 无 | 列出当前目录的目录及文件 |
date | 无 | 打印日期及时间 |
cd | (路径) | 改变当前目录至路径,可以是绝对或相对,默认(当前路径) |
status | 无 | 显示文件系统的状态1 |
rm | 文件或目录名 | 删除文件2 |
rn | 文件一 文件二 | 对文件或目录改名 |
pwd | 无 | 打印当前目录相对于根目录的绝对路径 |
mv | 文件 路径 | 将文件或目录移动到路径,可以是绝对路径或相对路径 |
link | 文件 路径 | 将文件链接到路径,硬链接3 |
[1] 文件系统的状态包括磁盘使用率,总的磁盘块数,空闲磁盘块数,空闲索引号, remember 号(用于对索引号表的搜索),以及记录空闲磁盘块号栈以及空闲索引 号栈的状态
[2] 对目录中包含文件或目录的情况没有处理,所以删除目录后,被删除目录中的 文件以及目录还没有被删除,但是已经无法搜索到了,这是一个 bug。
[3] 实现的是硬链接,链接到路径里的文件名和被链接的文件名字相同。若链接的 是目录,会出现这样的情况,因为链接到的目录和当前被链接目录是同一个“文件”, 所以其目录项是一样的,当你进入路径里链接到的目录中时,其实就是来到了被链 接的目录中,当你“cd ..”时,相当于在被链接目录里键入“cd ..”,也就是回到了 被链接目录的父目录,而不是链接到的目录的父目录。这样的描述确实有点坳口。
磁盘文件系统可以设定使用的磁盘大小以及每个磁盘块的大小,在 src/disk.h 中, 不过磁盘块不能小于 1024 B,因为我默认将 boot 区和 super 区都算在了同一个 磁盘块里。
除了上面提到的删除问题和链接问题,还有就是磁盘文件系统不检查当前是否有足 够的磁盘空间提供建立指定大小的文件,建立超过磁盘文件系统所能提供空间的文 件,会出现这样的情况,即文件会一直申请磁盘,直到用完所有空闲磁盘,接下来 申请到的磁盘块号将是出错的信息。
若还有有什么问题或建议,都可以联系我 EmailMe。