操作系統(tǒng)課程設(shè)計(jì)文件系統(tǒng)_第1頁(yè)
操作系統(tǒng)課程設(shè)計(jì)文件系統(tǒng)_第2頁(yè)
操作系統(tǒng)課程設(shè)計(jì)文件系統(tǒng)_第3頁(yè)
操作系統(tǒng)課程設(shè)計(jì)文件系統(tǒng)_第4頁(yè)
操作系統(tǒng)課程設(shè)計(jì)文件系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

年4月19日操作系統(tǒng)課程設(shè)計(jì)文件系統(tǒng)文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。學(xué)號(hào)*************學(xué)院課程設(shè)計(jì)課程名稱操作系統(tǒng)課程設(shè)計(jì)題目為L(zhǎng)INUX設(shè)計(jì)一個(gè)簡(jiǎn)單的二級(jí)文件系統(tǒng)專業(yè)*********班級(jí)*******姓名********成績(jī)指導(dǎo)教師***************1月17日至1月21日課程設(shè)計(jì)任務(wù)書設(shè)計(jì)題目:為L(zhǎng)INUX設(shè)計(jì)一個(gè)簡(jiǎn)單的二級(jí)文件系統(tǒng)設(shè)計(jì)目的:1、經(jīng)過(guò)一個(gè)簡(jiǎn)單多用戶文件系統(tǒng)的設(shè)計(jì),加深理解文件系統(tǒng)的內(nèi)部功能及內(nèi)部實(shí)現(xiàn)。2、提高學(xué)生的程序設(shè)計(jì)能力、提高算法設(shè)計(jì)質(zhì)量與程序設(shè)計(jì)素質(zhì)。設(shè)計(jì)任務(wù):(在規(guī)定的時(shí)間內(nèi)完成下列任務(wù))為L(zhǎng)INUX設(shè)計(jì)一個(gè)簡(jiǎn)單的二級(jí)文件系統(tǒng)。要求做到以下幾點(diǎn):1、能夠?qū)崿F(xiàn)下列幾條命令(至少4條)Login用戶登錄Dir列文件目錄Create創(chuàng)立文件Delete刪除文件Open打開文件Close關(guān)閉文件Read讀文件Write寫文件2、列目錄時(shí)要列出文件名、物理地址、保護(hù)碼和文件長(zhǎng)度。3、源文件能夠進(jìn)行讀寫保護(hù)。時(shí)間安排:1月17日布置課程設(shè)計(jì)任務(wù);分配題目后,查閱資料、準(zhǔn)備程序;1月18日~1月20日上機(jī)調(diào)試程序、書寫課程設(shè)計(jì)報(bào)告;1月21日上午提交課程設(shè)計(jì)報(bào)告及相關(guān)文檔。地點(diǎn):學(xué)校機(jī)房(具體見(jiàn)現(xiàn)代教育中心大屏幕安排)具體要求:1、課程設(shè)計(jì)報(bào)告按統(tǒng)一通用格式書寫,具體格式要求請(qǐng)?jiān)诰W(wǎng)絡(luò)上查閱2、每位學(xué)生應(yīng)獨(dú)立完成各自的任務(wù)且每天至少在設(shè)計(jì)室工作半天指導(dǎo)教師簽名:1月7日教研室主任(或責(zé)任教師)簽名:1月7日目錄TOC\o"1-2"\h\z\u一.項(xiàng)目概述 4二. 課程設(shè)計(jì)設(shè)計(jì)題目 4三. 開發(fā)語(yǔ)言及實(shí)現(xiàn)平臺(tái)或?qū)嶒?yàn)環(huán)境 4四. 設(shè)計(jì)目的 4五. 設(shè)計(jì)內(nèi)容 45.1. 任務(wù) 45.2. 主程序流程圖 5六. 程序設(shè)計(jì) 56.1. 設(shè)計(jì)思想 56.2. 設(shè)計(jì)要求 5七. 設(shè)計(jì)原理 67.1. 外存管理 67.2. linux的EXT2文件系統(tǒng) 67.3. 用內(nèi)存來(lái)模擬外存 67.4. 編碼 7八. 測(cè)試界面 15九. 參考文獻(xiàn) 17十. 設(shè)計(jì)心得體會(huì) 17十一. 設(shè)計(jì)過(guò)程中的疑問(wèn) 18十二. 指導(dǎo)教師評(píng)語(yǔ) 18一.項(xiàng)目概述Linux是一個(gè)性能穩(wěn)定、功能強(qiáng)大、效率高的操作系統(tǒng)。它在功能特性方面與Unix系統(tǒng)相似,同時(shí)又具有多任務(wù)、多用戶、多平臺(tái)等若干特性。Linux的源代碼是開放的,閱讀Linux源代碼,無(wú)疑是深入學(xué)習(xí)Linux的最好方法。文件系統(tǒng)是Linux操作系統(tǒng)的重要組成部分,Linux文件具有強(qiáng)大的功能。文件系統(tǒng)中的文件是數(shù)據(jù)的集合,文件系統(tǒng)不但包含著文件中的數(shù)據(jù)而且還有文件系統(tǒng)的結(jié)構(gòu),所有Linux用戶和程序看到的文件、目錄、軟連接及文件保護(hù)信息等都存儲(chǔ)在其中。課程設(shè)計(jì)設(shè)計(jì)題目課程設(shè)計(jì)題目:Linux二級(jí)文件系統(tǒng)設(shè)計(jì)開發(fā)語(yǔ)言及實(shí)現(xiàn)平臺(tái)或?qū)嶒?yàn)環(huán)境開發(fā)語(yǔ)言:C++/VC++實(shí)現(xiàn)平臺(tái)(環(huán)境):visualC++、windowxp、VMwareWorkstation(虛擬機(jī))V6.0.2、RedHatEnterpriseLinuxos、office設(shè)計(jì)目的(1)本實(shí)驗(yàn)的目的是經(jīng)過(guò)一個(gè)簡(jiǎn)單多用戶文件系統(tǒng)的設(shè)計(jì),加深理解文件系統(tǒng)的內(nèi)部功能和內(nèi)部實(shí)現(xiàn)。(2)結(jié)合數(shù)據(jù)結(jié)構(gòu)、程序設(shè)計(jì)、計(jì)算機(jī)原理等課程的知識(shí),設(shè)計(jì)一個(gè)二級(jí)文件系統(tǒng),進(jìn)一步理解操作系統(tǒng)。(3)經(jīng)過(guò)分對(duì)實(shí)際問(wèn)題的分析、設(shè)計(jì)、編程實(shí)現(xiàn),提高學(xué)生實(shí)際應(yīng)用、編程的能力設(shè)計(jì)內(nèi)容任務(wù)為L(zhǎng)inux系統(tǒng)設(shè)計(jì)一個(gè)簡(jiǎn)單的二級(jí)文件系統(tǒng)。要求做到以下幾點(diǎn):1.能夠?qū)崿F(xiàn)下列幾條命令: login用戶登錄 dir列目錄 create創(chuàng)立文件 delete刪除文件open打開文件 close關(guān)閉文件 read讀文件 write寫文件 cd進(jìn)出目錄2.列目錄時(shí)要列出文件名,物理地址,保護(hù)碼和文件長(zhǎng)度3.源文件能夠進(jìn)行讀寫保護(hù)主程序流程圖結(jié)束初始化文件目錄表結(jié)束初始化文件目錄表初始化已打開文件表輸入用戶名主文件目錄中又該用戶?輸入文件操作命令分析命令建立子程序打開子程序關(guān)閉子程序讀子程序?qū)懽映绦騽h除子程序開始無(wú)此用戶名否是createopenclosereadwritedelete圖1主程序流程圖程序設(shè)計(jì)設(shè)計(jì)思想本文件系統(tǒng)采用兩級(jí)目錄,其中第一級(jí)對(duì)應(yīng)于用戶賬號(hào),第二級(jí)對(duì)應(yīng)于用戶帳號(hào)下的文件。另外,為了簡(jiǎn)便文件系統(tǒng)未考慮文件共享,文件系統(tǒng)安全以及管道文件與設(shè)備文件等特殊內(nèi)容。首先應(yīng)確定文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu):主目錄、子目錄及活動(dòng)文件等。主目錄和子目錄都以文件的形式存放于磁盤,這樣便于查找和修改。用戶創(chuàng)立的文件,能夠編號(hào)存儲(chǔ)于磁盤上。如:file0,file1,file2…并以編號(hào)作為物理地址,在目錄中進(jìn)行登記。設(shè)計(jì)要求理解Linux的文件系統(tǒng)的組織;掌握常見(jiàn)的數(shù)據(jù)結(jié)構(gòu);系統(tǒng)采用兩級(jí)目錄,其中第一級(jí)對(duì)應(yīng)于用戶賬號(hào),第二級(jí)對(duì)應(yīng)于用戶帳號(hào)下的文件;使用文件來(lái)模擬外存,進(jìn)行數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)和操作算法的設(shè)計(jì),實(shí)現(xiàn)一個(gè)文件系統(tǒng)并實(shí)現(xiàn)基本的文件操作(為了簡(jiǎn)便文件系統(tǒng),不考慮文件共享,文件系統(tǒng)安全以及管道文件與設(shè)備文件等特殊內(nèi)容)。要求:對(duì)程序的每一部分要有詳細(xì)的設(shè)計(jì)分析說(shuō)明程序執(zhí)行的每個(gè)步驟要有具體的提示內(nèi)容或輸出源代碼格式規(guī)范,注釋不少于三分之一設(shè)計(jì)合適的測(cè)試用例,對(duì)得到的運(yùn)行結(jié)果要有分析,設(shè)計(jì)中遇到的問(wèn)題,設(shè)計(jì)的心得體會(huì)提交完整程序代碼、課程設(shè)計(jì)報(bào)告及相關(guān)文檔設(shè)計(jì)原理外存管理文件系統(tǒng)是一個(gè)含有大量的文件及其屬性,對(duì)文件進(jìn)行操作、管理的軟件,以及向用戶提供使用文件的接口的一個(gè)集合。在邏輯上它的層次結(jié)構(gòu)是這樣的:文件系統(tǒng)接口對(duì)對(duì)象的操作和管理的軟件集合邏輯文件系統(tǒng)基本I/O管理程序(文件組織模塊)基本文件系統(tǒng)(物理I/O層)I/O控制層(設(shè)備驅(qū)動(dòng)程序)對(duì)象及其屬性說(shuō)明作為產(chǎn)品的操作系統(tǒng)有各自的文件系統(tǒng)。比如MS的WINDOWS系列使用的是FAT16、FAT32或NTFS的文件系統(tǒng)、LINUX使用的是EXT2、EXT3文件系統(tǒng)等等。linux的EXT2文件系統(tǒng)linux使用一個(gè)叫虛擬文件系統(tǒng)的技術(shù)從而能夠支持多達(dá)幾十種的不同文件系統(tǒng),而EXT2是linux自己的文件系統(tǒng)。它有幾個(gè)重要的數(shù)據(jù)結(jié)構(gòu),一個(gè)是超級(jí)塊,用來(lái)描述目錄和文件在磁盤上的物理位置、文件大小和結(jié)構(gòu)等信息。inode也是一個(gè)重要的數(shù)據(jù)結(jié)構(gòu)。文件系統(tǒng)中的每個(gè)目錄和文件均由一個(gè)inode描述。它包含:文件模式(類型和存取權(quán)限)、數(shù)據(jù)塊位置等信息。如果希望詳細(xì)學(xué)習(xí)EXT2文件系統(tǒng)能夠參看linux內(nèi)核代碼include/linux/ext2_fs.h、include/linux/ext2_fs_sb.h等文件。 一個(gè)文件系統(tǒng)除了重要的數(shù)據(jù)結(jié)構(gòu)之外,還必須為用戶提供有效的接口操作。比如EXT2提供的OPEN/CLOSE接口操作。用內(nèi)存來(lái)模擬外存真正的文件系統(tǒng)對(duì)外存進(jìn)行管理,涉及到許多硬件、設(shè)備管理方面的底層技術(shù),一方面這些技術(shù)不屬于操作系統(tǒng)核心內(nèi)容,一方面過(guò)多的內(nèi)容不免造成實(shí)驗(yàn)者顧此失彼,因此這里推薦一種使用內(nèi)存來(lái)模擬外存的方式,能夠跳過(guò)這些硬件技術(shù)而直接把精力放在數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)和操作算法設(shè)計(jì)上面。假定pInode是一個(gè)指向inode結(jié)構(gòu)的指針,而且它已經(jīng)放入的需要放入的數(shù)值了,現(xiàn)在需要將其寫入到特定位置??捎萌缦麓a:……fd=fopen(“filesystem”,”w+b”);//fd是FILE指針類型,w便是寫方式,b表示二進(jìn)制fseek(fd,specific_area,SEEK_SET);//fd是文件指針;specific_area為整形,//為需要入pInode的位置fwrite(pInode,1,sizeof(inode),fd);//寫入pInode信息編碼#include<stdio.h>#include<string.h>#include<stdlib.h>#defineDIR_LENGTH1024/*路徑最長(zhǎng)可達(dá)100字節(jié)*/#defineMAX_WRITE1024*128/*寫入文字可達(dá)128k字節(jié)*/#defineMEM_D_SIZE1024*1024/*1M磁盤空間*/#defineDISKSIZE1024/*磁盤塊的大小1K*/#defineMSD5/*最大子目錄數(shù)5*/#defineDISK_NUMMEM_D_SIZE/DISKSIZE/*磁盤塊數(shù)目1024=1M/1K*/#defineFATSIZEDISK_NUM*sizeof(structfatitem)/*FAT表大小*/#defineMOFN5/*最大文件打開數(shù)5(即除根以外最大深度為5)*/#defineROOT_DISK_NOFATSIZE/DISKSIZE+1/*根目錄起始盤快號(hào)9*/#defineROOT_DISK_SIZEsizeof(structdirect)/*根目錄大小196*//*FAT表項(xiàng)結(jié)構(gòu)*/structfatitem/*size8*/{intitem;/*存放文件下一個(gè)磁盤的指針*/charem_disk;/*磁盤塊是否空閑標(biāo)志位0空閑*/};/*目錄項(xiàng)結(jié)構(gòu)*/structdirect{/*文件控制快信息*/structFCB{charname[9];/*文件/目錄名8位*/charproperty;/*屬性1位目錄0位普通文件*/intsize;/*文件/目錄字節(jié)數(shù)、盤塊數(shù))*/intfirstdisk;/*文件/目錄起始盤塊號(hào)*/intnext;/*子目錄起始盤塊號(hào)*/intsign;/*1是根目錄0不是根目錄*/}directitem[MSD+2];};/*文件打開表項(xiàng)結(jié)構(gòu)*/structopentable{structopenttableitem{charname[9];/*文件名*/intfirstdisk;/*起始盤塊號(hào)*/intsize;/*文件的大小*/}openitem[MOFN];intcur_size;/*當(dāng)前打文件的數(shù)目*/};/**/structfatitem*fat;/*FAT表*/structdirect*root;/*根目錄*/structdirect*cur_dir;/*當(dāng)前目錄*/structopentableu_opentable;/*文件打開表*/intfd=-1;/*文件打開表的序號(hào)*/char*bufferdir;/*記錄當(dāng)前路徑的名稱*/char*fdisk;/*虛擬磁盤起始地址*/intcreate(char*name);intopen(char*name);intclose(char*name);intwrite(intfd,char*buf,intlen);intread(intfd,char*buf);intdel(char*name);intmkdir(char*name);intrmdir(char*name);voiddir();intcd(char*name);/*創(chuàng)立文件*/intcreate(char*name){inti,j;if(strlen(name)>8)/*文件名大于8位*/return(-1);for(j=2;j<MSD+2;j++)/*檢查創(chuàng)立文件是否與已存在的文件重名*/{if(!strcmp(cur_dir->directitem[j].name,name))break;} if(j<MSD+2)/*文件已經(jīng)存在*/return(-4);for(i=2;i<MSD+2;i++)/*找到第一個(gè)空閑子目錄*/{if(cur_dir->directitem[i].firstdisk==-1)break;}if(i>=MSD+2)/*無(wú)空目錄項(xiàng)*/return(-2);if(u_opentable.cur_size>=MOFN)/*打開文件太多*/return(-3);for(j=ROOT_DISK_NO+1;j<DISK_NUM;j++)/*找到空閑盤塊j后退出*/{if(fat[j].em_disk=='0')break;}if(j>=DISK_NUM)return(-5);fat[j].em_disk='1';/*將空閑塊置為已經(jīng)分配*//*填寫目錄項(xiàng)*/strcpy(cur_dir->directitem[i].name,name);cur_dir->directitem[i].firstdisk=j;cur_dir->directitem[i].size=0;cur_dir->directitem[i].next=j;cur_dir->directitem[i].property='0';/**/fd=open(name);return0;/*打開文件*/intopen(char*name){inti,j;for(i=2;i<MSD+2;i++)/*文件是否存在*/{if(!strcmp(cur_dir->directitem[i].name,name))break;}if(i>=MSD+2)return(-1);/*是文件還是目錄*/if(cur_dir->directitem[i].property=='1')return(-4);/*文件是否打開*/for(j=0;j<MOFN;j++){if(!strcmp(u_opentable.openitem[j].name,name))break;}if(j<MOFN)/*文件已經(jīng)打開*/return(-2);if(u_opentable.cur_size>=MOFN)/*文件打開太多*/return(-3);/*查找一個(gè)空閑用戶打開表項(xiàng)*/for(j=0;j<MOFN;j++){if(u_opentable.openitem[j].firstdisk==-1)break;}/*填寫表項(xiàng)的相關(guān)信息*/u_opentable.openitem[j].firstdisk=cur_dir->directitem[i].firstdisk;strcpy(u_opentable.openitem[j].name,name);u_opentable.openitem[j].size=cur_dir->directitem[i].size;u_opentable.cur_size++;/*返回用戶打開表表項(xiàng)的序號(hào)*/return(j);}/*關(guān)閉文件*/intclose(char*name){inti;for(i=0;i<MOFN;i++){if(!strcmp(u_opentable.openitem[i].name,name))break;}if(i>=MOFN)return(-1);/*清空該文件的用戶打開表項(xiàng)的內(nèi)容*/strcpy(u_opentable.openitem[i].name,"");u_opentable.openitem[i].firstdisk=-1;u_opentable.openitem[i].size=0;u_opentable.cur_size--;return0;}/*寫文件*/intwrite(intfd,char*buf,intlen){char*first;intitem,i,j,k;intilen1,ilen2,modlen,temp;/*用$字符作為空格#字符作為換行符*/charSpace=32;charEndter='\n';for(i=0;i<len;i++){if(buf[i]=='$')buf[i]=Space;elseif(buf[i]=='#')buf[i]=Endter;}/*讀取用戶打開表對(duì)應(yīng)表項(xiàng)第一個(gè)盤塊號(hào)*/item=u_opentable.openitem[fd].firstdisk;/*--找到當(dāng)前目錄所對(duì)應(yīng)表項(xiàng)的序號(hào)*/for(i=2;i<MSD+2;i++){if(cur_dir->directitem[i].firstdisk==item)break;}temp=i;/*-存放當(dāng)前目錄項(xiàng)的下標(biāo)-*//*找到的item是該文件的最后一塊磁盤塊*/while(fat[item].item!=-1){item=fat[item].item;/*-查找該文件的下一盤塊--*/}/*計(jì)算出該文件的最末地址*/first=fdisk+item*DISKSIZE+u_opentable.openitem[fd].size%DISKSIZE;/*如果最后磁盤塊剩余的大小大于要寫入的文件的大小*/if(DISKSIZE-u_opentable.openitem[fd].size%DISKSIZE>len){strcpy(first,buf);u_opentable.openitem[fd].size=u_opentable.openitem[fd].size+len;cur_dir->directitem[temp].size=cur_dir->directitem[temp].size+len;}else{for(i=0;i<(DISKSIZE-u_opentable.openitem[fd].size%DISKSIZE);i++){/*寫一部分內(nèi)容到最后一塊磁盤塊的剩余空間(字節(jié))*/first[i]=buf[i];}/*計(jì)算分配完最后一塊磁盤的剩余空間(字節(jié))還剩下多少字節(jié)未存儲(chǔ)*/ilen1=len-(DISKSIZE-u_opentable.openitem[fd].size%DISKSIZE);ilen2=ilen1/DISKSIZE;modlen=ilen1%DISKSIZE;if(modlen>0)ilen2=ilen2+1;/*--還需要多少塊磁盤塊-*/for(j=0;j<ilen2;j++){for(i=ROOT_DISK_NO+1;i<DISK_NUM;i++)/*尋找空閑磁盤塊*/{if(fat[i].em_disk=='0')break;}if(i>=DISK_NUM)/*--如果磁盤塊已經(jīng)分配完了-*/return(-1);first=fdisk+i*DISKSIZE;/*--找到的那塊空閑磁盤塊的起始地址-*/if(j==ilen2-1)/*--如果是最后要分配的一塊-*/{for(k=0;k<len-(DISKSIZE-u_opentable.openitem[fd].size%DISKSIZE)-j*DISKSIZE;k++)first[k]=buf[k];}else/*-如果不是要最后分配的一塊--*/{for(k=0;k<DISKSIZE;k++)first[k]=buf[k];}fat[item].item=i;/*--找到一塊后將它的序號(hào)存放在上一塊的指針中-*/fat[i].em_disk='1';/*--置找到的磁盤快的空閑標(biāo)志位為已分配-*/fat[i].item=-1;/*--它的指針為-1(即沒(méi)有下一塊)-*/}/*--修改長(zhǎng)度-*/u_opentable.openitem[fd].size=u_opentable.openitem[fd].size+len;cur_dir->directitem[temp].size=cur_dir->directitem[temp].size+len;}return0;}/*讀文件*/intread(intfd,char*buf){intlen=u_opentable.openitem[fd].size;char*first;inti,j,item;intilen1,modlen;item=u_opentable.openitem[fd].firstdisk;ilen1=len/DISKSIZE;modlen=len%DISKSIZE;if(modlen!=0)ilen1=ilen1+1;/*--計(jì)算文件所占磁盤的塊數(shù)-*/first=fdisk+item*DISKSIZE;/*--計(jì)算文件的起始位置-*/for(i=0;i<ilen1;i++){if(i==ilen1-1)/*--如果在最后一個(gè)磁盤塊-*/{for(j=0;j<len-i*DISKSIZE;j++)buf[i*DISKSIZE+j]=first[j];}else/*--不在最后一塊磁盤塊-*/{for(j=0;j<len-i*DISKSIZE;j++)buf[i*DISKSIZE+j]=first[j];item=fat[item].item;/*-查找下一盤塊-*/first=fdisk+item*DISKSIZE;}}return0;}/*刪除文件*/intdel(char*name){inti,cur_item,item,temp;for(i=2;i<MSD+2;i++)/*--查找要?jiǎng)h除文件是否在當(dāng)前目錄中-*/{if(!strcmp(cur_dir->directitem[i].name,name))break;}cur_item=i;/*--用來(lái)保存目錄項(xiàng)的序號(hào),供釋放目錄中-*/if(i>=MSD+2)/*--如果不在當(dāng)前目錄中-*/return(-1);if(cur_dir->directitem[cur_item].property!='0')/*--如果刪除的(不)是目錄-*/return(-3);for(i=0;i<MOFN;i++)/*--如果文件打開,則不能刪除,退出-*/{if(!strcmp(u_opentable.openitem[i].name,name))return(-2);}item=cur_dir->directitem[cur_item].firstdisk;while(item!=-1)/*--釋放空間,將FAT表對(duì)應(yīng)項(xiàng)進(jìn)行修改-*/{temp=fat[item].item;fat[item].item=-1;fat[item].em_disk='0';item=temp;}/*釋放目錄項(xiàng)*/cur_dir->directitem[cur_item].sign=0;cur_dir->directitem[cur_item].firstdisk=-1;strcpy(u_opentable.openitem[cur_item].name,"");cur_dir->directitem[cur_item].next=-1;cur_dir->directitem[cur_item].property='0';cur_dir->directitem[cur_item].size=0;return0;}/*創(chuàng)立子目錄*/intmkdir(char*name){inti,j;structdirect*cur_mkdir;if(!strcmp(name,"."))return(-4);if(!strcmp(name,".."))return(-4);if(strlen(name)>8)/*-如果目錄名長(zhǎng)度大于8位-*/return(-1);for(i=2;i<MSD+2;i++)/*-如果有空閑目錄項(xiàng)退出-*/{if(cur_dir->directitem[i].firstdisk==-1)break;}if(i>=MSD+2)/*-目錄/文件已滿-*/return(-2);for(j=2;j<MSD+2;j++)/*-判斷是否有重名-*/{if(!strcmp(cur_dir->directitem[j].name,name))break;}if(j<MSD+2)/*-如果有重名-*/return(-3);for(j=ROOT_DISK_NO+1;j<DISK_NUM;j++)/*-找到空閑磁盤塊j后退出-*/{if(fat[j].em_disk=='0')break;}if(j>=DISK_NUM)return(-5);fat[j].em_disk='1';/*-將該空閑塊設(shè)置為已分配-*//*填寫目錄項(xiàng)*/strcpy(cur_dir->directitem[i].name,name);cur_dir->directitem[i].firstdisk=j;cur_dir->directitem[i].size=ROOT_DISK_SIZE;cur_dir->directitem[i].next=j;cur_dir->directitem[i].property='1';/*-所創(chuàng)目錄在虛擬磁盤上的地址(內(nèi)存物理地址)-*/cur_mkdir=(structdirect*)(fdisk+cur_dir->directitem[i].firstdisk*DISKSIZE);/*-初始化目錄-*//*-指向當(dāng)前目錄的目錄項(xiàng)-*/cur_mkdir->directitem[0].sign=0;cur_mkdir->directitem[0].firstdisk=cur_dir->directitem[i].firstdisk;strcpy(cur_mkdir->directitem[0].name,".");cur_mkdir->directitem[0].next=cur_mkdir->directitem[0].firstdisk;cur_mkdir->directitem[0].property='1';cur_mkdir->directitem[0].size=ROOT_DISK_SIZE;/*-指向上一級(jí)目錄的目錄項(xiàng)-*/cur_mkdir->directitem[1].sign=cur_dir->directitem[0].sign;cur_mkdir->directitem[1].firstdisk=cur_dir->directitem[0].firstdisk;strcpy(cur_mkdir->directitem[1].name,"..");cur_mkdir->directitem[1].next=cur_mkdir->directitem[1].firstdisk;cur_mkdir->directitem[1].property='1';cur_mkdir->directitem[1].size=ROOT_DISK_SIZE;for(i=2;i<MSD+2;i++)/*-子目錄都初始化為空-*/{cur_mkdir->directitem[i].sign=0;cur_mkdir->directitem[i].firstdisk=-1;strcpy(cur_mkdir->directitem[i].name,"");cur_mkdir->directitem[i].next=-1;cur_mkdir->directitem[i].property='0';cur_mkdir->directitem[i].size=0;}return0;}/*--顯示當(dāng)前目錄的子目錄*/voiddir(){inti;for(i=2;i<MSD

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論