連接:
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