连接:
pfs发布在sourceforge,pfs的网址为sourceforge.net/projects/pfspfs,若是有兴趣的能够去站点下载源代码
概述:
pfs提供了一个文件系统的抽象,文件系统的类型为PFS,pfs提供用户和组的概念,不支持进程概念
pfs支持unix/linux系统,不支持其余系统,另外因为本人经济问题,因此仅仅测试了32位环境,对于64位我不知道pfs可否正常工做
简介:
pfs是一个我的编写的软件,由于我自身能力的不足,pfs不免存在bug(可能存在让程序崩溃或者毁坏整个pfs文件系统的bug),若是您发现任何设计上的不
足和bug都请联系我,本人电话13812708015(我姓颜)。另外若是您是有能力编写vi这样编辑器的大神,也请联系我,我须要您的智慧。
最后pfs的实现的命令很少并且不少命令都是阉割版,因此pfs提供的功能并很少
设计目的:pfs设计的目的是我的的自娱自乐
经过阅读pfs源代码,文件系统爱好者和想要学习文件系统的人能够比较深刻的学习文件系统的一些知识,pfs支持了文件系统应该有的大部分特性,
全部阅读pfs的代码能够大概的了解基于inode文件系统的一些设计思路和思想
PFS文件系统:
PFS文件系统是一个基于inode的文件系统
PFS支持相关: PFS支持如下系统调用,具体函数的意义参考INTERFACE文档
int getuid(void);
int getgid(void);
int dup(int fd);
int close(int fd);
int umask(int umask);
int dup(int fd, int fd2);
int ftruncate(int fd, int length);
int truncate(const char *pathname, int length);
int creat(const char *pathname, int mode);
int access(const char *pathname, int mode);
int open(const char *pathname, int flags, ...);
int lseek(int fd, int offset, int whence);
int read(int fd, void *buf, uint bytes);
int write(int fd, const void *buf, uint bytes);
int unlink(const char *pathname);
int link(const char *oldpath, const char *newpath);
int rename(const char *oldpath, const char *newpath);
int symlink(const char *oldpath, const char *newpath);
int fstat(int fd, struct stat *stp);
int stat(const char *pathname, struct stat *stp);
int lstat(const char *pathname, struct stat *stp);
int fchmod(int fd, int mode);
int chmod(const char *pathname, int mode);
int fchown(int fd, int user, int group);
int chown(const char *pathname, int user, int group);
int lchown(const char *pathname, int user, int group);
int umount(const char *pathname);
int mount(const char *source, const char *target, int flags);
int chdir(const char *pathname);
int rmdir(const char *pathname);
int mkdir(const char *pathname, int mode);
int mknod(const char *pathname, int mode, int dev);
int closedir(mc_DIR *dp);
int telldir(mc_DIR *dp);
void seekdir(mc_DIR *dp, int loc);
char *getcwd(char *buf, int size);
DIR *opendir(const char *pathname);
struct dirent *readdir(DIR *dp);
IO:
pfs从unix/linux的标准输入读取数据而后输出到unix/linux的标准输出
安装说明:
pfs的安装特别简单,在shell中输入make便可,以后用户即可输入./pfs使用pfs
使用说明:
为了使用pfs,用户首先须要虚拟磁盘,虚拟磁盘能够用dd if=/dev/zero of=xxx.img bs=?? count=??来创建
而后用户须要调用mkfs来格式化一个虚拟磁盘,最后用户须要调用login命令来进入pfs系统,mkfs和help是惟一两个不须要登陆系统就能使用的命令
用户:
pfs默认提供了root,robin和tom三个用户,分别的密码为空,123456和111111。pfs暂时没有提供添加,删除用户和修改密码的命令
pfs命令介绍: pfs包括如下与文件系统相关的实用命令
su命令:
命令格式:
su user
命令概述:
切换到指定的用户user
返回值:
成功返回0,失败返回-1
cd命令:
命令格式:
cd directory
命令概述:
切换到指定的目录directory
返回值:
成功返回0,失败返回-1
rm命令:
命令格式1:
rm file1 [file2] ... [filen]
命令格式2:-r等效-R
rm -rR dir1 [dir2] ... [dirn]
命令概述:
删除文件或者目录,rm不能删除.和..,同时rm不能删除任何磁盘的根,对于符号连接,rm会直接删除符号连接而非符号连接所指的文件或者目录
返回值:
成功返回0,失败返回-1
cp命令:
命令格式1:
cp file1 file2
命令格式2:
cp file1 [file2] ... [filen] directory
命令概述:
复制文件,cp命令会复制符号连接所指的文件
返回值:
成功返回0,失败返回-1
mv命令:
命令格式1:
mv file1 file2
命令格式2:
mv file1 [file2] ... [filen] directory
命令概述:
移动文件,mv命令会移动符号连接所指的文件
返回值:返回值只与最后一次mv操做有关
成功返回0,失败返回-1
ls命令:
命令格式:
ls [-aciltuAULR] [directorys]
命令概述:
显示目录下的文件
返回值:
成功返回0,失败返回-1
lcp命令:
命令格式1:
lcp file1 file2
命令格式2:
lcp file1 [file2] ... [filen] directory
命令概述:
将文件从unix/linux系统中复制到格式化为PFS的磁盘中,lcp会复制符号连接所指的文件
返回值:返回值只与最后一次lcp操做有关
成功返回0,失败返回-1
cat命令:
命令格式:
cat [files]
命令概述:
依次显示各个文件的内容,cat会显示符号连接所指的文件的内容而非符号连接自身的内容
显示格式1:若是只有一个文件
内容
显示格式2:若是存在多个文件
file1:
内容
.
.
.
filen
内容
返回值:cat的返回值只与最后一个要显示的文件有关
成功返回0,失败返回-1
pwd命令:
命令格式:
pwd
命令概述:
输出当前目录
返回值:
成功返回0,失败返回-1
help命令:
命令格式:
help
命令概述:
打印帮助信息
返回值:
该命令老是返回0
quit命令:
命令格式:
quit
命令概述:
退出pfs
返回值:
无
mkfs命令:
命令格式:
mkfs pathname blocks_size swap_size inode_count
命令概述:
格式化命令,将磁盘格式化为文件系统PFS
参数意义:
pathname为要格式化的磁盘 - 例如1.img
blocks_size为PFS数据块的大小 - 可选的值为512, 1024, 2048, 4096, 8192
swap_size为交换区的大小 - 交换区大小最少为10
inode_count为inode的数目 - inode的数目最少为100,PFS的inode数目是在格式化时就固定的,而后能够修改策略使inode动态分配,
不过这样要增长一些代码
返回值:
成功返回0,失败返回-1
login命令:
命令格式:
login device
命令概述:
登陆命令,执行该命令后pfs会将device做为根磁盘而后初始化系统,而后提示用户登陆,最后进入系统
返回值:
成功返回0,失败返回-1
mkdir命令:
命令格式:
mkdir directory
命令概述:
建立一个空目录
返回值:
成功返回0,失败返回-1
rmdir命令:
命令格式:
rmdir directory
命令概述:
删除一个空目录
返回值:
成功返回0,失败返回-1
mount命令:
命令格式:
mount [-r] device dir
命令概述:
将磁盘device挂载置目录dir
参数意义:
device为unix/linux中的虚拟磁盘的路径名,dir为PFS文件系统中的空目录,-r表示只读挂载
返回值:
成功返回0,失败返回-1
umount命令:
命令格式:
umount dir
命令概述:
卸载挂载在目录dir的磁盘
返回值:
成功返回0,失败返回-1
logout命令:
命令格式:
logout
命令概述:
退出登陆状态
返回值:
成功返回0,失败返回-1node