一個文件系統的實現-PFS

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

相關文章
相關標籤/搜索