操作系統(tǒng)-文件系統(tǒng)-課程設(shè)計報告--后附源代碼

上傳人:每**** 文檔編號:46375721 上傳時間:2021-12-13 格式:DOC 頁數(shù):44 大?。?89.50KB
收藏 版權(quán)申訴 舉報 下載
操作系統(tǒng)-文件系統(tǒng)-課程設(shè)計報告--后附源代碼_第1頁
第1頁 / 共44頁
操作系統(tǒng)-文件系統(tǒng)-課程設(shè)計報告--后附源代碼_第2頁
第2頁 / 共44頁
操作系統(tǒng)-文件系統(tǒng)-課程設(shè)計報告--后附源代碼_第3頁
第3頁 / 共44頁

下載文檔到電腦,查找使用更方便

25 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《操作系統(tǒng)-文件系統(tǒng)-課程設(shè)計報告--后附源代碼》由會員分享,可在線閱讀,更多相關(guān)《操作系統(tǒng)-文件系統(tǒng)-課程設(shè)計報告--后附源代碼(44頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、計算機操作系統(tǒng) 課程設(shè)計報告 設(shè)計項目名稱: 文件系統(tǒng)設(shè)計 專 業(yè): 網(wǎng)絡(luò)工程 班 級: 201001 學(xué) 號: 201026340117;201026340121 姓 名: 張世波 趙流男 指 導(dǎo) 教 師: 張 瑞 紅 請預(yù)覽后下載!目錄1 課程設(shè)計簡介11.1 課程設(shè)計的目的11.2 課程設(shè)計內(nèi)容12 數(shù)據(jù)結(jié)構(gòu)的設(shè)計22.1 預(yù)定義22.2 結(jié)構(gòu)體22.3 全局變量和函數(shù)23 功能模塊(或算法)描述33.1 模塊劃分43.2 模塊流程圖64 程序運行結(jié)果45心得體會5參考文獻6附源代碼7請預(yù)覽后下載!1 課程設(shè)計簡介1.1 課程設(shè)計的目的課程設(shè)計目的使學(xué)生熟悉文件管理系統(tǒng)的設(shè)計方法;加深對

2、所學(xué)各種文件操作的了解及其操作方法的特點。通過模擬文件系統(tǒng)的實現(xiàn),深入理解操作系統(tǒng)中文件系統(tǒng)的理論知識, 加深對教材中的重要算法的理解。同時通過編程實現(xiàn)這些算法,更好地掌握操作系統(tǒng)的原理及實現(xiàn)方法,提高綜合運用各專業(yè)課知識的能力。1.2 課程設(shè)計內(nèi)容課程設(shè)計內(nèi)容設(shè)計一個簡單的多用戶文件系統(tǒng)。即在系統(tǒng)中用一個文件來模擬一個磁盤;此系統(tǒng)至少有:Create、delete、open、close、read、write等和部分文件屬性的功能。實現(xiàn)這個文件系統(tǒng)。能實際演示這個文件系統(tǒng)?;旧鲜沁M入一個界面(此界面就是該文件系統(tǒng)的界面)后,可以實現(xiàn)設(shè)計的操作要求。1)設(shè)計一個10個用戶的文件系統(tǒng),每次用戶可

3、保存10個文件,一次運行用戶可以打開5個文件。2)程序采用二級文件目錄(即設(shè)置主目錄MFD)和用戶文件目錄(UFD)。另外,為打開文件設(shè)置了運行文件目錄(AFD)。3)為了便于實現(xiàn),對文件的讀寫作了簡化,在執(zhí)行讀寫命令時,只需改讀寫指針,并不進行實際的讀寫操作。4)因系統(tǒng)小,文件目錄的檢索使用了簡單的線性搜索。5)文件保護簡單使用了三位保護碼:允許讀寫執(zhí)行、對應(yīng)位為1,對應(yīng)位為0,則表示不允許讀寫、執(zhí)行。6)程序中使用的主要設(shè)計結(jié)構(gòu)如下:主文件目錄和用戶文件目錄(MFD、UFD),打開文件目錄(AFD)即運行文件目錄,如圖5.1所示。 請預(yù)覽后下載!2 數(shù)據(jù)結(jié)構(gòu)的設(shè)計2.1 預(yù)定義#defin

4、e BLOCKSIZ 512/磁盤塊的大小#define DATABLKNUM 512/數(shù)據(jù)塊的數(shù)目#define BLKGRUPNUM50/數(shù)據(jù)塊組包含多少數(shù)據(jù)塊#define P_N_BLOCKS15/inode節(jié)點中 指向數(shù)據(jù)塊的指針個數(shù)#defineGROUPNUMDATABLKNUM/BLKGRUPNUM+1 /數(shù)據(jù)塊組 組數(shù)#define DINODESIZ 512/磁盤i結(jié)點區(qū)的大?。臻g32512)#define DINODENUM 32/磁盤i結(jié)點區(qū)的塊數(shù)#define SYSOPENFILE 40#define DIRNUM 32/一個目錄下的最多目錄和文件的總和數(shù)#def

5、ine DIRSIZ 14/文件、目錄名的長度(字節(jié))#define UPWDSIZ 15/密碼的長度#define UNAMSIZ 15/用戶名的長度#define PWDSIZsizeof(struct pwd) /密碼結(jié)構(gòu)的長度 #define PWDNUM BLOCKSIZ/PWDSIZ/密碼數(shù)據(jù)空間的大?。╬wd為單位)#define NOFILE 20/一個用戶最多可以打開的文件數(shù)目#define DINODESTART 4*BLOCKSIZ/i結(jié)點區(qū)的開始地址-inodes table ,1引導(dǎo) 2超塊 3block bitmap 4inode bitmap #define DA

6、TASTART (2+DINODENUM)*BLOCKSIZ/數(shù)據(jù)區(qū)的開始地址#defineDATASTARTNO36/數(shù)據(jù)區(qū)開始指針#define DIMODE_EMPTY00000/*可以用的空間*/#define DIMODE_FILE00001#define DIMODE_DIR 00002#define DIMODE_PASSWD00004#define GRUP_00/管理員組#define GRUP_11#define GRUP_22#define GRUP_442.2 結(jié)構(gòu)體/磁盤i結(jié)點結(jié)構(gòu),struct inode/ chardi_nameDIRSIZ;請預(yù)覽后下載! uns

7、igned _int16 di_ino;/*磁盤i節(jié)點標識*/ unsigned _int16 di_number;/*關(guān)聯(lián)文件數(shù),當(dāng)為0時表示刪除文件*/ unsigned _int16 di_mode;/*存取權(quán)限*/ unsigned _int16 di_uid;/*磁盤i節(jié)點用戶id*/ unsigned _int16 di_gid;/*磁盤i節(jié)點權(quán)限組id*/ /1管理員組 2用戶組 unsigned _int32 di_size;/*文件大小*/ unsigned _int32 di_ctime; /* Creation time */ unsigned _int32 di_mti

8、me; /* Modification time */ unsigned _int16 di_blockP_N_BLOCKS; /* 一組 block 指針 */ ;/目錄項結(jié)構(gòu)struct directchard_nameDIRSIZ;/*目錄名(14字節(jié))*/_int16 d_ino;/*目錄號*/;/超級快結(jié)構(gòu)struct super_blockunsigned _int16 s_inodes_count; /* inodes 計數(shù) */unsigned _int16 s_blocks_count; /* blocks 計數(shù) */unsigned _int16 s_r_blocks_co

9、unt; /* 保留的 blocks 計數(shù) */unsigned _int16 s_free_blocks_count; / 空閑的 blocks 計數(shù) unsigned _int16 s_free_inodes_count; /* 空閑的 inodes 計數(shù) */unsigned _int16 s_free_blocks_groupGROUPNUM;/新增 一個數(shù)組來記錄每個數(shù)據(jù)塊組中的空閑數(shù)據(jù)塊計數(shù) unsigned _int16 s_first_data_block; /* 第一個數(shù)據(jù) block */unsigned _int16 s_log_block_size; /* block

10、的大小 */unsigned _int16 s_blocks_per_group; /* 每 block group 的 block 數(shù)量 */unsigned _int16 s_inodes_per_group; /* 每 block group 的 inode 數(shù)量 */;/用戶密碼struct pwdunsigned _int8 p_uid;unsigned _int8 p_gid;char usernameUNAMSIZ;/*用戶名 新加的*/ char passwordUPWDSIZ;/目錄結(jié)構(gòu)struct dirstruct direct directDIRNUM;_int16 s

11、ize;請預(yù)覽后下載!2.3 全局變量和函數(shù)/全局變量unsigned _int8 di_bitmapDINODENUM;/ 硬盤inode節(jié)點位圖1表示已使用 0表示未使用unsigned _int8bk_bitmapDATABLKNUM;/ 數(shù)據(jù)塊block位圖 struct super_block filsys;/超級塊struct pwd pwdPWDNUM;FILE *fd;/文件指針struct inode *cur_inode;/i節(jié)點當(dāng)前目錄指針struct inode *inodetemp;/i節(jié)點指針const char fsystemname20=Linux.EXT2;/

12、模擬硬盤的文件名struct direct dir_bufBLOCKSIZ / sizeof(struct direct);/目錄數(shù)組char cmdhead20;/cmd 的頭 表示所在哪個文件夾、int i_lock=0;/inode位圖鎖 可能會多線程int b_lock=0;/block位圖鎖struct pwd *cur_user;/*全局函數(shù)*/extern intFormat();/格式化磁盤extern intInstall();/啟動,安裝文件系統(tǒng)struct inode * read_inode(int);/install里面讀取文件dinodestruct direct

13、* read_dir_data(int);/讀取存儲文件夾的物理塊extern void showdir();/命令 dirint Enterdir(char);/進入某個文件夾 命令- cd 文件名int Fd_dirfile(char);/查找當(dāng)前目錄里的文件 沒找到返回-1 找到返回inode號int Iscmd(char);/判斷是否兩個字符串的命令void two_cmd(char,char);/兩個字符串的命令int creat(char);/創(chuàng)建文件void changeinode();/交換指針char * ReadFile(char);/讀取文件int mkdir(char)

14、;/創(chuàng)建文件夾void showbitmap();/顯示位圖int deletefd(char);/刪除文件int editfile(char);/編輯文件int rename(char);/重命名void showhelp();/命令幫助void login();void logout();int access();/權(quán)限判斷/*磁盤i節(jié)點的分配與釋放(當(dāng)一個新文件被建立的時候,在給該文件分配磁盤存儲區(qū)之前,應(yīng)為該文件分配存放該文件說明信息的磁盤i節(jié)點,當(dāng)從文件系統(tǒng)中刪除某個文件時,應(yīng)首先刪除它的磁盤i節(jié)點項。)*/ intialloc();/*開辟一個空閑的i節(jié)點,返回i節(jié)點*/磁盤塊分配

15、與釋放函數(shù)intballoc(int);/申請硬盤空間請預(yù)覽后下載!結(jié)構(gòu)體說明:硬盤模擬文件:每個數(shù)據(jù)塊512字節(jié),第一個數(shù)據(jù)塊空閑備用,第2塊是超級塊,第3塊是inode位圖,第4塊是block位圖,第5塊開始有32塊是inode節(jié)點,然后是數(shù)據(jù)區(qū)block,512塊。超級塊:存放整個文件系統(tǒng)的基本狀態(tài),如:inode塊數(shù),block總塊數(shù),空閑的block計數(shù),空閑的inode計數(shù),每個數(shù)據(jù)塊組中的空閑塊數(shù)(為block分組,便于讀?。?,每個block的大?。?12字節(jié)),每個數(shù)據(jù)塊組的block塊數(shù)。Inode位圖:用一個數(shù)組來描述每個inode的使用狀況,1表示被占用,0表示空閑。Bl

16、ock位圖:用一個數(shù)組來描述每個數(shù)據(jù)區(qū)的block的使用狀況,1表示被占用,0表示空閑。inode節(jié)點:inode記錄了文件或者目錄在數(shù)據(jù)區(qū)存放位置,是文件還是目錄,是否系統(tǒng)文件,屬于管理員組還是普通用戶組,是由誰創(chuàng)建的,創(chuàng)建時間等。如果是目錄,則還記錄了里面包含多少個文件或子目錄。是文件則記錄了文件的大小。讀取文件要先通過inode然后找到block,才能讀取。Block數(shù)據(jù)塊:存放文件的地方,如果是目錄則記錄了這個目錄下所有的文件和子目錄的名稱和所占的inode如果是文本文檔,則是字節(jié)流文件。3 功能模塊(或算法)描述我負責(zé)整體設(shè)計,實現(xiàn)底層具體設(shè)計,format格式化,install安裝

17、,login登錄,ialloc申請inode空間,balloc申請block空間。3.1 format 格式化只寫打開模擬文件,初始化超級快,初始化dinode位圖 block位圖,初始化主目錄,初始化etc目錄,初始化管理員admin 目錄,初始化用戶xiao 目錄,初始化 用戶passwd文件,寫入模擬硬盤文件。3.2 install 安裝讀寫打開模擬文件,讀取dinode位圖 block位圖,讀取主目錄,讀取etc目錄,讀取管理員admin 目錄,讀取用戶xiao 目錄,讀取 用戶passwd文件。 3.3 login 登陸用戶輸入用戶名和密碼,在passwd文件中查找是否有此用戶,核對

18、密碼。正確則登陸成功,當(dāng)前目錄設(shè)定到當(dāng)前用戶文件夾下。登錄流程圖3.4 ialloc 申請inode空間先檢測inode位圖是否加鎖,是則退出。加鎖,檢測inode空間是否還有已滿,是則退出。在inode位圖中順序查找空閑的inode,找到則返回inode地址,block解鎖。函數(shù)結(jié)束。流程圖3.3請預(yù)覽后下載!登錄流程圖ialloc 流程圖3.3balloc流程圖3.43.5 balloc 申請block空間先檢測block位圖是否加鎖,是則退出。加鎖,檢測block空間是否還有k個空閑,否則退出。在還有空閑block的組中查找是否有k個空閑,沒有則去下一個block組中查找,找到則返回bl

19、ock地址,block解鎖。函數(shù)結(jié)束。流程圖3.43.5 create 創(chuàng)建文本文件查找當(dāng)前目錄下是否有同名文件,是則退出,否則讓用戶輸入文本文件內(nèi)容,以#結(jié)束。申請inode空間(ialloc函數(shù)),申請硬盤block空間(balloc函數(shù)),申請失敗則結(jié)束。將文件內(nèi)容寫入inode空間和block空間。修改當(dāng)前目錄的結(jié)構(gòu),修改超級快,修改inode位圖,block位圖,寫入模擬硬盤。流程圖3.53.7 cdir 創(chuàng)建文件夾查找當(dāng)前目錄下是否有同名文件,是則退出,否則,申請inode空間(ialloc函數(shù)),申請硬盤block空間(balloc函數(shù)),申請失敗則結(jié)束。將文件夾內(nèi)容寫入inod

20、e空間和block空間。修改當(dāng)前目錄的結(jié)構(gòu),修改超級快,修改inode位圖,block位圖,寫入模擬硬盤。3.7 read edit 讀取和追加文本文件Read-查找當(dāng)前目錄下是否該文件,沒有則退出,否則調(diào)用access()權(quán)限判斷,有權(quán)限則判斷是不是文件,不是則退出,是文件則讀取文件并顯示。Edit-調(diào)用讀取文件模塊,讀取成功則用戶輸入追加的內(nèi)容,如果追加的內(nèi)容大于一個block則申請block空間,失敗則退出,申請成功則保存文件。3.8 access(文件名) 權(quán)限判斷先判斷當(dāng)前目錄是否有該文件,在當(dāng)前目錄的block找到該文件,判斷當(dāng)前登錄用戶是哪個組,判斷是否該用戶創(chuàng)建,判斷該文件的可

21、見級別。請預(yù)覽后下載!如果是該用戶創(chuàng)建的 則有讀寫權(quán)限如果當(dāng)前用戶是管理員組的 也具有讀寫權(quán)限如果該文件是用戶可查看文件則都具有權(quán)限。3.9 cd 進入子目錄 或上級目錄查找當(dāng)前目錄是否有該子目錄,沒有則退出,調(diào)用access()判斷當(dāng)前用戶是否有權(quán)限,無則退出,有則讀取該子目錄的inode,將當(dāng)前目錄指向該目錄。3.10 attr(文件名)查看文件或者文件夾的屬性先查找當(dāng)前目錄下是否有該文件或目錄,有則判斷文件是否系統(tǒng)文件,是否文本文件,是否目錄,由誰創(chuàng)建,屬于什么組,占用的block,和inode。將其全部顯示出來。3.9 del 刪除文件或目錄查找當(dāng)前目錄是否有該文件名,沒有則退出,有則

22、調(diào)用access()判斷是否有權(quán)限,有則判斷是否為系統(tǒng)文件,是則無法刪除,不是則判斷是否是文件,是文件則直接刪除,不是則判斷是否文件夾,是文件夾則判斷該文件夾下是否有文件,有文件則無法刪除。提示用戶是否刪除,確認則刪除文件,修改當(dāng)前文件夾inode,block結(jié)構(gòu),修改該文件占有的inode和block位圖為0,修改超級塊,寫入模擬硬盤。流程圖3.93.8 access(文件名) 權(quán)限判斷先判斷當(dāng)前目錄是否有該文件,在當(dāng)前目錄的block找到該文件,判斷當(dāng)前登錄用戶是哪個組,判斷是否該用戶創(chuàng)建,判斷該文件的可見級別。如果是該用戶創(chuàng)建的 則有讀寫權(quán)限如果當(dāng)前用戶是管理員組的 也具有讀寫權(quán)限如果該

23、文件是用戶可查看文件則都具有權(quán)限。請預(yù)覽后下載!4 程序運行結(jié)果1格式化 和登錄界面 登錄后顯示幫助信息 ,進入到用戶文件夾下2 dir命令-顯示當(dāng)前目錄下的文件和目錄3 logout命令-注銷用戶請預(yù)覽后下載!普通用戶無法進入admin管理員目錄。請預(yù)覽后下載!5心得體會操作系統(tǒng)課程設(shè)計是本課程重要的實踐教學(xué)環(huán)節(jié)。課程設(shè)計的目的,一方面使學(xué)生更透徹地理解操作系統(tǒng)的基本概念和原理,使之由抽象到具體;另一方面,通過課程設(shè)計加強學(xué)生的實驗手段與實踐技能,培養(yǎng)學(xué)生獨立分析問題、解決問題、應(yīng)用知識的能力和創(chuàng)新精神。與本課程的實驗教學(xué)相比,課程設(shè)計獨立設(shè)課,具有更多的學(xué)時,給學(xué)生更多自行設(shè)計、自主實驗的

24、機會,充分放手讓學(xué)生真正培養(yǎng)學(xué)生的實踐動手能力,全面提高學(xué)生的綜合素質(zhì)。在設(shè)計的過程中遇到問題,可以說得是困難重重,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,不過設(shè)計終于順利完成了,在設(shè)計中遇到了很多編程問題,最后在老師的辛勤指導(dǎo)下,終于游逆而解。同時,在老師的身上我學(xué)得到很多實用的知識,再次我表示感謝!同時,對給過我們幫助的所有同學(xué)和各位指導(dǎo)老師再次表示忠心的感謝!請預(yù)覽后下載!參考文獻1 袁慶龍,候文義Ni-P合金鍍層組織形貌及顯微硬度研究太原理工大學(xué)學(xué)報,2001,32(1):51-53.(連續(xù)出版物:序號 主要

25、責(zé)任者文獻題名J刊名,出版年份,卷號(期號):起止頁碼)2劉國鈞,王連成圖書館史研究北京:高等教育出版社,1979:15-18,31(專著:序號 主要責(zé)任者文獻題名出版地:出版者,出版年:起止頁碼)3 孫品一高校學(xué)報編輯工作現(xiàn)代化特征中國高等學(xué)校自然科學(xué)學(xué)報研究會科技編輯學(xué)論文集(2)北京:北京師范大學(xué)出版社,1998:10-22(論文集:序號 主要責(zé)任者文獻題名主編論文集名出版地:出版者,出版年:起止頁碼)請預(yù)覽后下載!附:源代碼/*makefile*/filsys:main.o igetput.o iallfre.o ballfre.o name.o acess.o log.o close

26、.o create.o delete.o dir.o dirlt.o open.o rdwt.o format.o install.o halt.occ -o filsys main.o igetput.o iallfre.o ballfre.o name.o acess.o log.o close.o create.o delete.o dir.o dirlt.o open.o rdwt.o format.o install.o halt.o main.o:main.c filesys.h cc -c main.cigetput.o:igetput.c filesys.h cc -c ige

27、tput.ciallfre.o:iallfre.c filesys.h cc -iallfre.cballfre.o:ballfre.c filesys.h cc -c ame.o:name.c filesys.h cc -c name.caccess.o:access.c filesys.h cc -c access.clog.o:log.c filesys.h cc -c log.cclose.o:close.c filesys.h cc -c close.ccreate.o:create.c filesys.h cc -c create.cdelete.o:delete.c filesy

28、s.h cc -c delete.c dir.o:dir.c filesys.h cc -c dir.c dirlt.o:dirlt.c filesys.h cc -c dirlt.copen.o:open.c filesys.h cc -c open.crdwt.o:rdwt.c filesys.h cc -c rdwt.cformat.o:format.c filesys.h cc -c format.c install.o:install.c filesys.h cc -c install.c halt.o:halt.c cc -c halt.c請預(yù)覽后下載!/*filesys.h*/#

29、define BLOCKSIZ 512#define SYSOPENFILE 40#define DIRNUM 128#define DIRSIZ 14#define PWDSIZ 12#define PWDNUM 32#define NOFILE 20#define NADDR 10#define NHINO 128#define USERNUM 10#define DINODESIZ 32/*filesys*/#define DINODEBLK 32 #define FILEBLK 512#define NICFREE 50#define NICINOD 50#define DINODES

30、TART 2*BLOCKSIZ#define DATASTART(2+DINODEBLK)*BLOCKSIZ/*di_mode*/#define DIEMPTY 0000#define DIFILE 01000#define DIDIR 02000#define UDIREAD 00001#define UDIWAITE 00002#define UDIEXICUTE 00004#define GDIREAD 00010#define GDIWRITE 00020#define GDIEXICUTE 00040#define ODIREAD 00100#define ODIWRITE 0020

31、0#define ODIEXICUTE 00400#define READ 1#define WRITE2#define EXICUTE 4#define DEFAULTMODE 00777/*i_flag*/請預(yù)覽后下載!#define IUPDATE 00002/*s_fmod*/#define SUPDATE 00001/*f_flag*/#define FREAD 00001#define FWRITE 00002#define FAPPEND 00004/*error*/#define DISKFULL 65535/*fseek origin*/#define SEEK_SET 0s

32、ruct inodestruct inode *i_forw;struct inode*i_back;char i_flag;unsigned int i_ino;unsigned int i_count;unsigned short di_number;unsigned short di_mode;unsigned short di_uid;unsigned short di_gid;unsigned int di_size;unsigned int di_addrNADDR; ; struct dinodeunsigned short di_number;unsigned short di

33、_mode;unsigned short di_uid;unsigned short di_gid;unsigned long di_size;unsigned int di_addrNADDR;struct directunsigned d_nameDIRSIZ;unsigned int d_ino;請預(yù)覽后下載!struct filsysunsigned short s_isize;unsigned long s_fsize;unsigned int s_nfree;unsigned short s_pfree;unsigned int s_freeNICFREE;unsigned int

34、 s_ninode;unsigned short s_pinode;unsigned int s_inodeNICINOD;unsigned int s_finode;char s_fmod; struct pwdunsigned short p_uid;unsigned short p_gid;unsigned passwordPWOSIZ;struct dirstruct direct directDIRNUM;int size;struct hinodestruct inode* i_forw;struct filechar f_flag;unsigned int f_count;str

35、uct inode *f_inode;unsigned long f_off;struct userunsigned short u_default_mode;unsigned short u_uid;unsigned short u_gid;unsigned short u_ofileNOFILE;請預(yù)覽后下載!extern struct hinode hinodeNHINO;extern struct dir dir;extern struct file sys_ofileSYSOPENFILE;extern struct filsys filsys;extern struct pwd p

36、wdPWDNUM;extern struct user userUSERNUM;extern FILE *fd;extern struct inode *cur_path_inode;extern int user_id,file_block;extern struct inode *iget();extern iput();extern unsigned int balloc();extern bfree();extern struct inode *ialloc();extern ifree();extern unsigned int namei(); extern unsigned in

37、t iname();extern unsigned int access();extern _dir();extern mkdir();extern chdir();extern dirlt();extern unsigned short open(); extern create();extern unsigned int read();extern unsigned write();extern int login();extern logout();extern install();extern format();extern close();extern halt();#include

38、#include#includefilesys.hstruct hinode hinodeNHINO;struct dir dir;struct file sys_ofileSYSOPENFILE;struct filsys filsys;請預(yù)覽后下載!struct pwd pwdPWDNUM;struct user userPWDNUM;FILE *fd;struct inode* cur_path_inode;int user_id,file_block;main() unsigned short ab_fd1,ab_fd2,ab_fd3,ab_fd4;unsigned short bhy

39、_fd1;char *buf;printf(nDo you want to format the diskn);if(getchat()=y)printf(Format will erase all context on the disk.Are you sure?n);getchar();elsereturn;if(getchar()=y)formar();elseretrun;install();_dir();login(2118,abcd);user_id=0;mkdir(a2118);chdir(a2118);ab_fd1=creat(user_id,file0.c,01777);fi

40、le_block=BLOCKSIZ*6+5;buf=(char*)malloc(BLOCKSIZ*6+5);write(ab_fd1,buf,BLOCKSIZ*6+5);close(user_id,ab_fd1);free(buf);mkdir(subdir);chdir(subdir);ab_fd2=creat(user_id,file1.c,01777);file_block=BLOCKSIZ*4+20;buf=(char*)malloc(BLOCKSIZ*4+20);write(ab_fd2,buf,BLOCKSIZ*4+20);請預(yù)覽后下載!close(user_id,ab_fd2);

41、free(buf);chdir(.);ab_fd3=creat(user_id,file2.c,01777);file_block=BLOCKSIZ*3+255;buf=(char*)malloc(BLOCKSIZ*3+255);write(ab_fd3,buf,BLOCKSIZ*3+255);close(user_id,ab_fd3);free(buf);_dir();delete(ab_file0.c);ab_fd4=creat(user_id,file3.c,01777);file_block=BLOCKSIZ*8+300;buf=(char*)malloc(BLOCKSIZ*8+300

42、);write(ab_fd4,buf,BLOCKSIZ*8+300);close(user_id,ab_fd4);free(buf);_dir();ab_fd3=open(user_id,file2.c,FAPPEND);file_block=BLOCKSIZ*3+100;buf=(char*)malloc(BLOCKSIZ*3+100);write(ab_fd3,buf,BLOCKSIZ*3+100);close(user_id,ab_fd3);free(buf);_dir();chdir(.);logout();halt();#include#includefilesys.hformat(

43、)struct inode *inode;struct direct dir_bufBLOCKSIZ/(DIRSIZ+2);struct files;請預(yù)覽后下載!unsigned int block_bufBLOCKSIZ/sizeof(int);char *buf;int i,j;fd=fopen(filesystem,r+w+b);buf=(char*)malloc(DINODEBLK+FILEBLK+2)*BLOCKSIZ*sizeof(char);if(buf=NULL)printf(nfile system file creat failed! n);exit(0);fseek(f

44、d,0,SEEK_SET);fwrite(buf,1,(DINODEBLK+FILEBLK+2)*BLOCKSIZ*sizeof(char),fd);pwd0.p_uid=2116;pwd0.p_gid=03;strcpy(pwd0.password,dddd);pwd1.p_uid=2117;pwd1.p_gid=03;strcpy(pwd1.password,bbbb);pwd2.p_uid=2118;pwd2.p_gid=04;strcpy(pwd2.password,abcd);pwd3.p_uid=2119;pwd3.p_gid=04;strcpy(pwd3.password,ccc

45、c);pwd4.p_uid=2220;pwd4.p_gid=05;strcpy(pwd4.password,eeee);inode=iget(1);inode-di_number=1;inode-di_mode=DEFAULTMODE|DIDIR;inode-di_size=3*(DIRSIZ+2);inode-di_addr0=0;strcpy(dir_buf0.d_name,.);dir_buf0.d_ino=1;strcpy(dir_buf1.d_name,.);dir_buf1.d_ino=1;strcpy(dir_buf2.d_name,ect);請預(yù)覽后下載!dir_buf2.d_

46、ino=2;fseek(fd,DATASTART,SEEK_SET);fwrite(dir_buf,1,3*(DIRSIZ+2),fd);iput(inode);inode=iget(2);inode-di_number=1;inode-di_mode=DEFAULTMODE|DIDIR;inode-di_size=3*(DIRSIZ+2);inode-di_addr0=1;strcpy(dir_buf0.d_name,.);dir_buf0.d_ino=1;strcpy(dir_buf1.d_name,.);dir_buf1.d_ino=2;strcpy(dir_buf2.d_name,pa

47、ssword);dir_buf2.d_ino=3;fseek(fd,DATASTART+BLOCKSIZ*1,SEEK_SET);fwrite(dir_buf,1,3*(DIRSIZ+2),fd);iput(inode);inode=iget(3);inode-di_number=1;inode-di_mode=DEFAULTMODE|DIDIR;inode-di_size=BLOCKSIZ;inode-di_addr0=2;for(i=5;i,PWDNUM;i+)pwdi.p_uid=0;pwdi.p_gid=0;strcpy(pwdi.password, )fseek(fd,DATASTA

48、RT+2*BLOCKSIZ,SEEK_SET);fwrite(pwd,1,BLOCKSIZ,fd);iput(inode);filsys.s_isize=DINODEBLK;filsys.s_fsize=FILEBLK;filsys.s_ninode=DINODEBLK;filsys.s_nfree=FILEBLK-3;for(i=0;iNICINOD;i+)請預(yù)覽后下載!filsys.s_inodei=4+i;filsys.s_pinode=0;filsys.s_rinode=NICNOD+4;block_bufNICFREE-1=FILEBLK+1;for(i=0;iiNICFREE-1;

49、i+)for(j=0;j2;i-)filsys.s_freeNICFREE-1+i-j=i;filsys.s_pfree=NIVFREE-1-j+3;filsys.s_pinode=0;fseek(fd,BLOCKSIZ,SEEK_SET);fwrite(&filsys,1sizeof(filsys),fd);fseek(fd,BLOCKSIZ,SEEK_SET);fread(&filsys.s_size,a,sizeof(filsys),fd);#include#include#includefilsys.hinstall()請預(yù)覽后下載!int i,j;fseek(fd,BLOCKSIZ,

50、SEEK_SET);fread(&filsysk,1,sizeof(struct filsys),fd);for(i=0;iNHINO;i+)hinodei.i_forw=NULL;for(i=0;iSYSOPENFILE;i+)sys_ofilei.f_count=0;sys_ofilei.f_inode=NULL;for(i=0;iUSERNUM;i+)useri.u_uid=0;useri.u_gid=0;for(j=0;jdi_size/(DIRSIZ+2);for(i=0;iDIRNUM;i+)strcpy(dir.directi.d_name,);dir.directi.d_ino

51、=0;for(i=0;idi_addri,SEEK_SET);fread(&dir.directBLOCKSIZ/(DIRSIZ+2)*i1,BLOCKSIZ,fd);fseek(fd,DATASTART+BLOCKSIZ*cur_path_inode-di_addri,SEEK_SET);fread(&dir.direct(BLOCKSIZ)/(DIRSIZ+2)*i,1,cur_path_inode-di_size%BLOCKSIZ,fd);#include請預(yù)覽后下載!#includefilesys.hhalt()struct inode *inode;int i,j;chdir(.);

52、iput(cur_path_inode);for(i=0;iUSERNUM;i+)if(useri.u_uid!=0)for(j=0;jNOFILE;j+)if(useri.u_ofilej!=SYSOPENFILE+1)close(i,j);useri.u_ofilej=SYSOPENFILE+1;fseek(fd,BLOCKSIZ,SEEK_SET);fwrite(&filsys,1,sizeof(struct filsys).fd);fclose(fd);printf(nGOODBYE bye. See you Next Time.Please turn off the switchn)

53、;exit(0);#include#inclodufilesys.hstruct inode *iget(dinodeid)unsigned int dinodeid;請預(yù)覽后下載!int existed=0,inodeid;long addr;struct inode *temp,*newinode;inodeid=dinodeid%NHINO;if(hinodeinodeid).i_forw=NULL)existed=0;elsetemp=hinodeinodeid.i_forw;while(temp)if(temp-i_ino=inodeid)/*existed*/existed=1;t

54、emp-i_count+;return temp;elsetemp=temp-i_forw;addr=DINODESTART+dinodeid*DINODESIZ;newinode=(struct inode*)malloc(sizeof(struct inode)fseek(fd,addr,SEEK_SET);fread(&(newinode-di_number),DINODESIZ,1,fd);newinode-i_forw=hinodeinodeid.i_forw;newinode-i_back=newinodelif(newinode-i_forw!=NULL) newinode-i_

55、forw-i_back=newinode;hinodeinodeid.i_forw=newinode;newinode-i_count=1;newinode-i_flag=0;newinode-_ino=dinodeid;newinode-di_size=3*(DIRSIZ+2);if(dinodeid=3)newinode-di_size=BLOCKSIZ;請預(yù)覽后下載!return newinode;input(pinode) /*input()*/struct inode *pinode; long addr; unsigned int block_num; int i; if(pinode-i_count1)

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!