?? 最新說明.txt
字號:
文件系統的模擬實現
(請參閱文檔: "設計說明書.sxw" 和 "舊的設計報告.sxw"(課程設計的報告)(用openoffice打開sxw文件).
(文檔資源不夠豐富, 請多多包涵)
大概如下:
(1)文件系統存儲機構的總體安排
在第一次運行模擬程序時, 程序向操作系統申請建立一個件,命名為myfilesys.dat。
我們的文件系統就是建立在myfilesys.dat的存儲空間中,文件系統的存儲空間的安排如下:
我們定義一個磁盤塊為1KB,一個磁盤塊I節點為64字節。
因此,在我們的文件系統中,超級塊的磁盤塊地址為0,
I節點區的磁盤塊地址為1~1024,即I節點區占用1024塊。
文件存儲區磁盤塊地址為1025~2024,即文件存儲區占用1000塊。
(2)文件系統的主要模塊組成原理
本文件系統主要包括兩大模塊:文件系統服務端模塊和文件操作函數模塊。
兩大模塊之間分別獨立于不同的進程,它們之間進行進程間的通信。
因此,文件操作函數模塊,相當于客戶端,任何程序如果調用這些函數,
即可對本文件系統的文件操作.
(3)源代碼的組成文件.
fs_server.c實現文件系統服務端模塊,其包含頭文件fs_server.h。
myfilelib.c 實現文件操作函數模塊,其包含頭文件myfilelib.h。
myshell.c 一個測試程序,其包含頭文件myfilesys.h。
fs_server.c 被編譯生成服務端可執行文件。
myfilelib.c被編譯生成myfilelib.o目標文件,實現源代碼的隱藏, 并提供給用戶程序鏈接。
myshell.c相當于一個普通的用戶程序,其調用myfilelib.o中的文件操作函數,調用文件系統的功能,對本模擬文件系統進行測試。
(4)編譯和安裝:
直接運行make命令即可.
Makefile 文件如下:
all: server myshell
@echo
@echo Building server and myshell is done
server: fs_server.c fs_server.h
gcc -o server fs_server.c
myshell: myfilelib.o myshell.c myfilesys.h
gcc -o myshell myfilelib.o myshell.c
myfilelib.o: myfilelib.c myfilelib.h
gcc -o myfilelib.o -c myfilelib.c
(5) 測試
程序myshell連接myfilelib.o里面的文件操作函數,對文件操作函數進行測試.
myshell提供ls, mkdir, cd , cat 四個命令來測試文件操作函數:
int Open(const char *pathname, int flags, ...);
int Read(int fd, char *buf, unsigned int nbytes);
int Write(int fd, char *buf, unsigned int nbytes);
void List(const char *pathname, int flag);
void mymkdir(const char *pathname);
int SearchDir(const char *pathname);
void Close(int fd);
void Over(void);
例子:
[root@localhost kcsjnodebug]# ./server& 運行服務端
[1] 4112
[root@localhost kcsjnodebug]# ./myshell 運行客戶端
[myshell@/]$ls 列目錄
.
..
[myshell@/]$mkdir dir1 創建目錄dir1
[myshell@/]$ls
.
..
dir1
[myshell@/]$mkdir dir2 創建目錄dir2
[myshell@/]$ls
.
..
dir1
dir2
[myshell@/]$cd dir1 進入目錄dir1
[myshell@/dir1]$ls
.
..
[myshell@/dir1]$mkdir dir3 創建目錄dir3
[myshell@/dir1]$ls
.
..
dir3
[myshell@/dir1]$cat > file1.txt 創建文件file1.txt
Infile1.txt 只能輸入一行,而且不能有空格
[myshell@/dir1]$cat file1.txt 輸出文件file1.txt的內容
Infile1.txt
[myshell@/dir1]$cd .. 退出目錄dir1
[myshell@/]$ls
.
..
dir1
dir2
[myshell@/]$exit 退出測試程序
(6)已知錯誤
如果不正常中止程序server 或者 myshell。下次運行此兩個程序前,
一定要先刪掉/tmp/serv_fifo 和 /tmp/client_*_fifo 兩個管道文件。
(*代表任意字符)
因為采用管道通信,如果不正常中止程序server 或者 myshell,就沒有清除
此兩管道文件。會導致下次啟動失敗。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -