同濟大學CS《操作系統》課程設計: 文件系統TongJi University CS OS assignment: file system
本項目是為2021年同濟大學計算機系操作系統課程設計。實現了類UNIX文件系統。

本學期最簡單的大作業(主要是沒有GUI),開發該文件系統耗時10天
如果本倉庫有幫助到你,就送我一顆star吧?
如果有問題也可以在issue提出,方便其他人參考或一起討論?
倉庫遵循MIT開源協議
這個變量主要用於記錄當前讀到的文件長度,這個變量的存在降低了文件混合索引的難度。函數不需要實現計算好該文件用了多少個索引塊,也不需要實現知道文件的混合索引結構是怎樣的,直接將索引文件一律看作是用滿了所有索引塊的達到最大大小的巨型文件。從直接索引開始遍歷文件,再到一級索引,再到二級索引,當length達到了文件的大小直接退出遍歷即可完成對任意大小文件的遍歷。但這種方法的缺點是每一次讀文件都要從文件頭開始,降低了隨機讀寫的效率。
這個變量主要用於指示編輯器從哪一行開始顯示文本,當文件行數超過了控制台高度時這個變量開始生效。控制台光標在控制台中的行數映射到實際文本的行數要加上start_line這個變量。當光標移動到最下面一行時再次按下方向鍵下,start_line會加一實現文本在編輯器內的向下翻頁,向上翻頁反之亦然。
這個變量屬於命令行用戶界麵類,主要記錄了用戶處在文件系統中的路徑。因為在文件系統中,所有操作接口都是以絕對路徑為基準的,而用戶在命令行界面下輸入的命令是以cur_dir這個相對路徑作為基準的。因此用戶界面在使用文件系統的接口時要將cur_dir與用戶輸入的路徑進行拼接,把絕對路徑作為參數傳入文靜系統的接口函數。


本文件系統運行與64位Windows操作系統下,文件系統的模擬文件卷大小為128MB,請確保程序目錄下有足夠的可用空間。
退出程序時禁止直接關閉程序,必須使用exit命令退出文件系統,否則可能導致文件系統錯誤或崩潰。
慎重修改/etc/users.txt和/etc/groups.txt文件,這兩個文件與用戶管理相關,如果修改格式不當可能會導致文件系統無法登錄或其他權限問題。
如果以上兩條問題發生請嘗試格式化文件系統。
未登錄狀態下可用命令:
| 命令 | 參數 | 功能 |
|---|---|---|
| login | 用戶名(字符串) | 用戶登錄 |
| exit | 退出系統 | |
| format | 格式化文件系統 | |
| help | 顯示命令提示清單 |
登錄狀態下可用命令:
| 命令 | 參數 | 功能 |
|---|---|---|
| logout | 用戶註銷 | |
| exit | 退出系統 | |
| mkdir | 目錄名(字符串,長度小於28字節,不能是多級目錄) | 創建子目錄 |
| cd | 目錄名(字符串,長度小於28字節,當前目錄下的子目錄名,不能是多級目錄) | 進入子目錄 |
| ls | 顯示當前目錄清單 | |
| rmdir | 目錄名(字符串,長度小於28字節,當前目錄下的子目錄名,不能是多級目錄) | 刪除子目錄 |
| touch | 文件名(字符串,長度小於28字節,不能是多級目錄) | 創建新文件 |
| chmod | 文件名(字符串,長度小於28字節,當前目錄下的文件名,不能是多級目錄) 權限(三位八進制數) | 修改文件或目錄權限 |
| rm | 文件名(字符串,長度小於28字節,當前目錄下的文件名,不能是多級目錄) | 刪除文件 |
| useradd | 用戶名(字符串) 用戶組名(字符串,用戶組必須已存在) | 添加用戶 |
| userdel | 用戶名(字符串,用戶必須已存在) | 刪除用戶 |
| groupadd | 用戶組名(字符串) | 添加用戶組 |
| groupdel | 用戶組名(字符串,用戶組必須已存在) | 刪除用戶組 |
| df | 查看磁盤使用情況 | |
| show | 文件名(字符串,長度小於28字節,當前目錄下的文件名,不能是多級目錄) | 打印文件內容。如果文件不是字符文件可能會出錯 |
| vi | 文件名(字符串,長度小於28字節,當前目錄下的文件名,不能是多級目錄) | 用編輯器打開文件 |
| format | 格式化文件系統 | |
| win2fs | Windows下的文件路徑(字符串,符合Windows文件路徑規範) FS文件系統當前目錄下的文件名(字符串,長度小於28字節,當前目錄下的文件名,不能是多級目錄) | 將Windows文件內容複製到FS文件系統文件 |
| fs2win | FS文件系統當前目錄下的文件名(字符串,長度小於28字節,當前目錄下的文件名,不能是多級目錄) Windows下的文件路徑(字符串,符合Windows文件路徑規範) | 將FS文件系統文件內容複製到Windows文件 |
| cls | 清屏 | |
| help | 顯示命令提示清單 |
編輯器使用說明:
進入編輯器後可以通過方向鍵移動光標,當光標位於上下邊界時,可以再次令光標向邊界處移動完成文本內容的翻頁,輸入回車鍵刪除光標前的字符,輸入其他字符在光標處插入字符,按下esc鍵退出並保存文本。編輯器中的“□”表示回車鍵,“#”表示文件結尾。注意編輯器僅能夠處理ASCII字符。
程序可能因為命令輸入不當、文件系統空間用滿、非法權限等原因導致各種異常,發生異常時程序會將異常信息輸出到控制台,請根據輸出信息解決異常。如果始終無法解決異常請嘗試將文件系統格式化。
可調參數位於filesystem.h文件中的宏定義
| 參數 | 說明 |
|---|---|
| VERSION | 文件系統版本 |
| DISK_NAME | 模擬文件卷文件名 |
| DISK_SIZE | 文件卷磁盤大小,至少大於1024*512個字節,建議設置為(261120+1024) *512個字節即128MB |
| 文件名 | 說明 |
|---|---|
| filesystem.h | 文件系統頭文件 |
| filesystem.cpp | 文件系統C++文件 |
| main.cpp | 主程序C++文件(命令行用戶界面) |
| test.cpp | 對文件系統文件接口的測試文件,沒有將該文件編譯到最終的可執行程序 |
| FS.data | 模擬磁盤文件卷 |
| 文件系統.exe | 可執行程序(命令行用戶界面) |







