操作系統(tǒng)課程設(shè)計(jì)報(bào)告-設(shè)計(jì)、實(shí)現(xiàn)一個(gè)模擬的文件系統(tǒng)_第1頁(yè)
操作系統(tǒng)課程設(shè)計(jì)報(bào)告-設(shè)計(jì)、實(shí)現(xiàn)一個(gè)模擬的文件系統(tǒng)_第2頁(yè)
操作系統(tǒng)課程設(shè)計(jì)報(bào)告-設(shè)計(jì)、實(shí)現(xiàn)一個(gè)模擬的文件系統(tǒng)_第3頁(yè)
操作系統(tǒng)課程設(shè)計(jì)報(bào)告-設(shè)計(jì)、實(shí)現(xiàn)一個(gè)模擬的文件系統(tǒng)_第4頁(yè)
操作系統(tǒng)課程設(shè)計(jì)報(bào)告-設(shè)計(jì)、實(shí)現(xiàn)一個(gè)模擬的文件系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、文 華 學(xué) 院2021 2021 學(xué)年度第 2 學(xué)期?操作系統(tǒng)課程設(shè)計(jì)?考查試卷A卷課程性質(zhì):必修 使用范圍:本科考查時(shí)間:2021年3月2 日 考查方式: 開(kāi)卷考試類(lèi)型論文大作業(yè)調(diào)研報(bào)告其它總分課程設(shè)計(jì)閱卷老師簽名試 題:要 求: 獨(dú)立完成,3000-8000字不含附件。目錄一、課程設(shè)計(jì)任務(wù)及要求.3 1.1設(shè)計(jì)任務(wù).3 1.2設(shè)計(jì)要求.3二、算法及數(shù)據(jù)結(jié)構(gòu).3 2.1主要數(shù)據(jù)結(jié)構(gòu).3 2.2用戶(hù)管理模塊.5 2.2.1初始化用戶(hù)函數(shù).52系統(tǒng)用戶(hù)的輸出函數(shù).62.2.3用戶(hù)的查找函數(shù).6 2.3創(chuàng)立文件函數(shù).6 2.4刪除文件函數(shù).8 2.5翻開(kāi)文件函數(shù).9 3.6讀文件函數(shù).11 3.7

2、寫(xiě)文件函數(shù).11 3.8關(guān)閉文件函數(shù).12 3.9顯示文件函數(shù).13 3.9.1顯示用戶(hù)文件.13顯示已翻開(kāi)的文件.13三、程序設(shè)計(jì)與實(shí)現(xiàn).18 4.1 程序流程圖.18 4.2 程序說(shuō)明.18 4.3 實(shí)驗(yàn)結(jié)果.19四、參考文獻(xiàn).21六、收獲、體會(huì)和建議.22 七、附錄源程序清單.23 一、課程設(shè)計(jì)任務(wù)及要求1.1 設(shè)計(jì)任務(wù)設(shè)計(jì)、實(shí)現(xiàn)一個(gè)模擬的文件系統(tǒng)1.2 設(shè)計(jì)要求建立文件存儲(chǔ)介質(zhì)的管理機(jī)制建立目錄采用一級(jí)目錄結(jié)構(gòu)文件系統(tǒng)功能顯示目錄、創(chuàng)立、刪除、翻開(kāi)、關(guān)閉、讀、寫(xiě)文件操作接口顯示目錄、創(chuàng)立、刪除、翻開(kāi)、關(guān)閉、讀、寫(xiě)?yīng)毩⑼瓿烧n程設(shè)計(jì)內(nèi)容文本的課程設(shè)計(jì)報(bào)告,內(nèi)容包括調(diào)試記錄和程序清單(附注釋

3、)。二、算法及數(shù)據(jù)結(jié)構(gòu)/* *定義文件數(shù)據(jù)結(jié)構(gòu) */ typedef struct file char file_name20 ; bool file_protect3 ; bool open_file_protect3 ; /僅在文件翻開(kāi)時(shí)有效 int read , write ; /定義為讀寫(xiě)指針 int file_length ; struct file *next ; File ; /* *用戶(hù)與文件的映射 */ typedef struct x_map char userName20 ; File *file ; struct x_map *next ; Map ; /* *定義主文

4、件目錄 */ typedef struct mfd Map *head , *tail ; MFD ; /* *翻開(kāi)文件目錄 */ typedef struct afd File *head , *tail ; int max_open ; int current_open ; AFD ; 主文件目錄MFD和用戶(hù)文件目錄UFD翻開(kāi)文件目錄AFD2.2.1初始化用戶(hù)函數(shù) void initUser(MFD *mfd) /初始化兩個(gè)不同用戶(hù) for(int i = 1 ; i = 2 ; i+) Map *m ; m = (Map*)malloc(sizeof(Map) ; if(m = NULL

5、) exit(0) ; coutm-userName ; m-file = NULL ; m-next = NULL ; if(mfd-head = NULL) mfd-head = mfd-tail = m ; else mfd-tail-next = m ; mfd-tail = m ; 初始化兩個(gè)不同用戶(hù),把輸入用戶(hù)的用戶(hù)名下的目錄指針、文件指針初始化void displayUser(MFD *mfd) Map *m = NULL ; m = mfd-head; coutuser : ;while(m) coutuserNamenext ; couthead ; while(m) if(

6、strcmp(userName , m-userName) = 0) return m ; m = m-next ; return NULL ; 進(jìn)行用戶(hù)的查找,找到那么返回用戶(hù)映射指針bool createFile(Map *user , char file_name , bool file_protect3 , int file_length) File *file ; file = (File*)malloc(sizeof(File) ; if(file = NULL) return false ; /進(jìn)行文件的初始化 strcpy(file-file_name , file_name)

7、 ; file-file_protect0 = file_protect0 ; file-file_protect1 = file_protect1 ; file-file_protect2 = file_protect2 ; file-file_length = file_length ; file-read = file-write = 0 ; file-next = NULL ; if(user-file = NULL) user-file = file ; else File *op , *preOp = NULL ; op = user-file ; /查找是否存在同名文件 whil

8、e(op) if(strcmp(op-file_name , file-file_name) = 0) coutThe file name file_name is already exit ! next ; preOp-next = file ; 輸入文件名,文件權(quán)限及文件長(zhǎng)度,將文件的名稱(chēng)、讀寫(xiě)權(quán)限、長(zhǎng)度等進(jìn)行初始化,然后查找是否存在同名文件,存在同名文件時(shí)那么輸出該文件已存在并報(bào)錯(cuò)bool deleteFile(Map *user , char file_name , AFD *afd) File *file = NULL , *prefile = NULL , *temp ; file

9、 = afd-head ; /在翻開(kāi)文件中查找 while(file) if(strcmp(file_name , file-file_name) = 0) coutfile_namenext ; file = user-file ; /在文件中進(jìn)行查找 while(file) if(strcmp(file_name , file-file_name) = 0) if(file = user-file) temp = file ; user-file = file-next ; else temp = file ; prefile-next = file-next ; delete temp

10、; return true ; prefile = file ; file = file-next ; if(prefile-next = NULL) coutuser userName has not the file file_namefile ; while(file) if(strcmp(file-file_name , file_name) = 0) break ; file = file-next ; if(file) File *xfile ; xfile = (File*)malloc(sizeof(File) ; if(xfile = NULL) return false ;

11、 *xfile = *file ; /根據(jù)文件的權(quán)限進(jìn)行翻開(kāi)權(quán)限的賦值 if(xfile-file_protect0 = open_file_protect0) xfile-open_file_protect0 = open_file_protect0 ; else coutno read priority ! file_protect1 = open_file_protect1) xfile-open_file_protect1 = open_file_protect1 ; else coutno write priority ! file_protect2 = open_file_prot

12、ect2) xfile-open_file_protect2 = open_file_protect2 ; else coutno excute priority ! next = NULL ; if(afd-head = NULL) afd-head = afd-tail = xfile ; afd-current_open += 1 ; else if(afd-current_open max_open) afd-tail-next = xfile ; afd-tail = xfile ; afd-current_open += 1 ; else coutThe open file is

13、too many ! endl ; return false ; else coutthe file_name is not exit !head ; while(file) if(strcmp(file-file_name , file_name) = 0) if(file-open_file_protect0) file-read+ ; return true ; Else coutno read priority ! nnext ; coutno such file ! head ; while(file) if(strcmp(file-file_name , file_name) =

14、0) if(file-open_file_protect1) file-write+ ; return true ; else coutno write priority ! nnext ; coutno such file ! head ; while(file) if(strcmp(file-file_name , file_name) = 0) if(file = afd-head) if(file = afd-tail) temp = file ; afd-head = afd-tail = NULL ; else temp = file ; afd-head = file-next

15、; else if(file = afd-tail) temp = file ; preFile-next = NULL ; afd-tail = preFile ; else temp =file ; preFile-next = file-next ; delete temp ; return true ; preFile = file ; file = file-next ; coutThe file is not exit ! endl ; return false ; 輸入要關(guān)閉的文件名,在翻開(kāi)文件鏈表中查找該文件是否存在,假設(shè)沒(méi)有那么輸出提示該文件不存在并報(bào)錯(cuò),假設(shè)存在那么繼續(xù)運(yùn)行

16、,進(jìn)行刪除操作。void displayUserFile(Map *user) coutThe fileList of userNamefile ; while(file) coutfile_name file_protect0 file_protect1 file_protect2 file_lengthnext ; 輸出該用戶(hù)下的文件鏈表,并輸出對(duì)應(yīng)文件的讀、寫(xiě)、執(zhí)行的權(quán)限信息和文件長(zhǎng)度信息void displayOpenFile(AFD *afd , Map *user) coutThe open file of userName : head ; while(file) coutfil

17、e_name file_protect0 file_protect1 file_protect2 file_length ; coutreadcout : read writecout : writenext ; 輸出該用戶(hù)下的翻開(kāi)文件鏈表、對(duì)應(yīng)文件的讀、寫(xiě)、執(zhí)行的權(quán)限信息及文件長(zhǎng)度信息和該文件的讀、寫(xiě)信息4. 程序設(shè)計(jì)與實(shí)現(xiàn)4.1 程序流程圖用戶(hù)登陸開(kāi)始初始化用戶(hù)目錄界面分析命令創(chuàng)立文件刪除文件翻開(kāi)文件讀文件寫(xiě)文件關(guān)閉文件退出系統(tǒng)結(jié)束4.2 程序說(shuō)明該程序是在虛擬機(jī)中的Linux系統(tǒng)下的C+程序,用系統(tǒng)自帶的編譯軟件編譯,在控制臺(tái)上編譯、調(diào)試運(yùn)行通過(guò)。4.3 實(shí)驗(yàn)結(jié)果在控制臺(tái)上編譯運(yùn)行程序,

18、輸入初始化的兩個(gè)用戶(hù)名,選擇一個(gè)用戶(hù)名進(jìn)入目錄界面,輸入命令。輸入命令create創(chuàng)立文件,輸出提示文件名、文件權(quán)限、文件長(zhǎng)度,輸入相應(yīng)的文件信息,創(chuàng)立成功那么輸出當(dāng)前用戶(hù)的文件鏈表 。輸入命令delete刪除文件,輸出提示please input the files name you want to delete:,輸入要?jiǎng)h除的文件名,刪除成功那么輸出當(dāng)前用戶(hù)的文件鏈表。輸入命令open翻開(kāi)文件,輸出提示“please input the files name you want to open :輸入要翻開(kāi)的文件名和相應(yīng)的權(quán)限,翻開(kāi)文件成功那么輸出當(dāng)前用戶(hù)的翻開(kāi)文件鏈表。輸入命令read讀文

19、件,輸出提示“please input the files name you want to read:,輸入要讀的文件名,讀成功那么讀指針加一并輸出當(dāng)用戶(hù)的翻開(kāi)文件鏈表。輸入命令write寫(xiě)文件,輸出提示“please input the files name you want to write:,輸入要寫(xiě)的文件名,寫(xiě)成功那么寫(xiě)文件指針加一并輸出當(dāng)前用戶(hù)的翻開(kāi)文件鏈表。輸入命令close關(guān)閉文件,輸出提示“please input the files name you want to close:,輸入要關(guān)閉的文件名,關(guān)閉成功那么輸出當(dāng)前用戶(hù)的翻開(kāi)文件鏈表。參考文獻(xiàn)計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)Li

20、nux版鄭然、龐麗萍著。人民郵電出版社2021計(jì)算機(jī)操作系統(tǒng)第2版龐麗萍、陽(yáng)富民著。人民郵電出版社2021收獲、體會(huì)和建議本次課程設(shè)計(jì)是一次將書(shū)本知識(shí)應(yīng)用到實(shí)踐考驗(yàn)。經(jīng)過(guò)此次設(shè)計(jì),將課本和課堂所學(xué)的一些知識(shí)運(yùn)用到程序中還是需要一定的努力,自學(xué)一些相關(guān)的知識(shí)。在課程設(shè)計(jì)過(guò)程中,我學(xué)到了很多人生的哲理,懂得怎么樣去制定方案,怎么樣去實(shí)現(xiàn)這個(gè)方案,并掌握了在執(zhí)行過(guò)程中怎么樣去克服心理上的不良情緒,提高了自己解決問(wèn)題的能力,知道了應(yīng)該耐心的去解決程序中的問(wèn)題和缺乏。遇到問(wèn)題時(shí),應(yīng)該認(rèn)真去查閱資料,學(xué)習(xí)不懂的知識(shí)。通過(guò)課程設(shè)計(jì),對(duì)自己學(xué)習(xí)Linux操作系統(tǒng)有用的軟件及對(duì)操作系統(tǒng)中文件管理系統(tǒng)的了解,更深

21、一步掌握了操作系統(tǒng)的一些概念。在設(shè)計(jì)的過(guò)程中遇到問(wèn)題,可以說(shuō)得是困難重重,難免會(huì)遇到過(guò)各種各樣的問(wèn)題,同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的缺乏之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,通過(guò)在網(wǎng)上查詢(xún)資料以及參考書(shū)本上的列題等,完成了此次課程設(shè)計(jì)。附錄源程序清單/*模擬文件管理*/#include#include#include#include using namespace std ;/*定義文件數(shù)據(jù)結(jié)構(gòu)*/typedef struct file char file_name20 ; bool file_protect3 ; bool open_file_protect3 ; /僅在文

22、件翻開(kāi)時(shí)有效 int read , write ; /定義為讀寫(xiě)指針 int file_length ; struct file *next ; File ;/*用戶(hù)與文件的映射*/typedef struct x_map char userName20 ; File *file ; struct x_map *next ; Map ;/*定義主文件目錄*/typedef struct mfd Map *head , *tail ; MFD ;/*翻開(kāi)文件目錄*/typedef struct afdFile *head , *tail ;int max_open ;int current_op

23、en ; AFD ;/*進(jìn)行用戶(hù)的初始化*/void initUser(MFD *mfd) ;/*進(jìn)行系統(tǒng)用戶(hù)的輸出*/void displayUser(MFD *mfd) ;/*進(jìn)行用戶(hù)的查找,找到那么返回用戶(hù)映射指針*/Map * queryUser(char userName , MFD *mfd) ;/*進(jìn)行文件的創(chuàng)立操作*成功那么返回true , 否那么返回false*/bool createFile(Map *user , char file_name , bool file_protect3 , int file_length) ;/*進(jìn)行文件刪除操作*/bool deleteF

24、ile(Map *user , char file_name , AFD *afd) ;/*進(jìn)行文件翻開(kāi)操作*/bool openFile(Map *user , char file_name , AFD *afd , bool open_file_protect) ;/*進(jìn)行讀操作*/bool readFile(AFD *afd , char file_name) ;/*進(jìn)行文件的寫(xiě)操作*/bool writeFile(AFD *afd , char file_name) ;/*關(guān)閉文件*/bool closeFile(AFD *afd , char file_name) ;/*進(jìn)行用戶(hù)文件

25、的顯示*/void displayUserFile(Map *user) ;/*顯示翻開(kāi)的文件*/void displayOpenFile(AFD *afd , Map *user) ;/*測(cè)試主函數(shù)*/int main() MFD *mfd ; mfd = (MFD*)malloc(sizeof(MFD) ; if(mfd = NULL) exit(0) ; mfd-head = mfd-tail = NULL ; initUser(mfd) ; displayUser(mfd) ; char userName20 ; while(true) coutuserName ; Map *user

26、 ; user = queryUser(userName , mfd) ; if(user = NULL) coutNo such user ! endl; else /為用戶(hù)初始化翻開(kāi)文件目錄 AFD *afd ; afd = (AFD*)malloc(sizeof(AFD) ; if(afd = NULL) coutThe memory is not enough ! head = afd-tail = NULL ; afd-max_open = 5 ; afd-current_open = 0 ; char command20 ; char file_name20 ; bool file

27、_protect3 ; bool open_file_protect3 ; int file_length ; cout*endl; /cout0.初始化-endl; cout1.創(chuàng)立文件-createendl; cout2.刪除文件-deleteendl; cout3.翻開(kāi)文件-openendl; cout4.讀文件-readendl; cout5.寫(xiě)文件-writeendl; cout6.關(guān)閉文件-closeendl; coutendl; coutendl; coutendl; coutendl; coutendl; coutendl; while(true) coutuserName ;

28、 cincommand ; /輸入命令進(jìn)行操作 if(strcmp(command , create) = 0) coutfile_namefile_protect0file_protect1file_protect2file_length ; createFile(user , file_name , file_protect , file_length) ; displayUserFile(user) ; else if(strcmp(command , delete) = 0) coutfile_name ; deleteFile(user , file_name , afd) ; di

29、splayUserFile(user) ; else if(strcmp(command , open) = 0) coutfile_nameopen_file_protect0open_file_protect1open_file_protect2 ; openFile(user , file_name , afd , open_file_protect) ; displayOpenFile(afd , user) ; else if(strcmp(command , close) = 0) coutfile_name ; closeFile(afd , file_name) ; displ

30、ayOpenFile(afd , user) ; else if(strcmp(command , read) = 0) coutfile_name ; readFile(afd , file_name) ; displayOpenFile(afd , user) ; else if(strcmp(command , write) = 0) coutfile_name ; writeFile(afd , file_name) ; displayOpenFile(afd , user) ; else if(strcmp(command , exit) = 0) break ; else cout

31、No such command command endl ; return 0 ;void initUser(MFD *mfd) /初始化2個(gè)不同用戶(hù) for(int i = 1 ; i = 2 ; i+) / Map *m ; m = (Map*)malloc(sizeof(Map) ; if(m = NULL) exit(0) ; coutm-userName ; m-file = NULL ; m-next = NULL ; if(mfd-head = NULL) mfd-head = mfd-tail = m ; else mfd-tail-next = m ; mfd-tail =

32、m ; void displayUser(MFD *mfd) Map *m = NULL ; m = mfd-head; coutuser : ; while(m) coutuserNamenext ; couthead ; while(m) if(strcmp(userName , m-userName) = 0) return m ; m = m-next ; return NULL ;bool createFile(Map *user , char file_name , bool file_protect3 , int file_length) File *file ; file =

33、(File*)malloc(sizeof(File) ; if(file = NULL) return false ; /進(jìn)行文件的初始化 strcpy(file-file_name , file_name) ; file-file_protect0 = file_protect0 ; file-file_protect1 = file_protect1 ; file-file_protect2 = file_protect2 ; file-file_length = file_length ; file-read = file-write = 0 ; file-next = NULL ; i

34、f(user-file = NULL) user-file = file ; else File *op , *preOp = NULL ; op = user-file ; /查找是否存在同名文件 while(op) if(strcmp(op-file_name , file-file_name) = 0) coutThe file name file_name is already exit ! next ; preOp-next = file ; void displayUserFile(Map *user) coutThe fileList of userNamefile ; whil

35、e(file) coutfile_name file_protect0 file_protect1 file_protect2 file_lengthnext ; bool deleteFile(Map *user , char file_name , AFD *afd)File *file = NULL , *prefile = NULL , *temp ;file = afd-head ;/在翻開(kāi)文件中查找while(file) if(strcmp(file_name , file-file_name) = 0) coutfile_namenext ;file = user-file ;/

36、在文件中進(jìn)行查找while(file) if(strcmp(file_name , file-file_name) = 0) if(file = user-file) temp = file ; user-file = file-next ; else temp = file ; prefile-next = file-next ; delete temp ; return true ; prefile = file ; file = file-next ;if(prefile-next = NULL) coutuser userName has not the file file_namef

37、ile ;while(file) if(strcmp(file-file_name , file_name) = 0) break ; file = file-next ;if(file) File *xfile ; xfile = (File*)malloc(sizeof(File) ; if(xfile = NULL) return false ; *xfile = *file ; /根據(jù)文件的權(quán)限進(jìn)行翻開(kāi)權(quán)限的賦值 if(xfile-file_protect0 = open_file_protect0) xfile-open_file_protect0 = open_file_protect0 ; else coutno read priority ! file_protect1 = open_file_protect1) xfile-open_file_protect1 = open_file_protect1 ; else coutno write priority ! file_protect2 = open_file_protect2) xfile-open_file_protect2 = open_file_protect2 ; else coutno excute priority ! n

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論