操作系統(tǒng)實(shí)驗(yàn)報(bào)告范文模板_第1頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告范文模板_第2頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告范文模板_第3頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告范文模板_第4頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告范文模板_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

操作系統(tǒng)實(shí)驗(yàn)報(bào)告范文模板這是操作系統(tǒng)課程中的四次實(shí)驗(yàn)最終報(bào)告,內(nèi)包括進(jìn)程通信實(shí)驗(yàn),進(jìn)程同步互斥實(shí)驗(yàn),文件系統(tǒng)模擬實(shí)驗(yàn)和Linu某hell操作。里面的程序都是我運(yùn)行過的。操作系統(tǒng)上機(jī)實(shí)驗(yàn)報(bào)告班級(jí):學(xué)號(hào):姓名:實(shí)驗(yàn)地點(diǎn):實(shí)驗(yàn)時(shí)間:這是操作系統(tǒng)課程中的四次實(shí)驗(yàn)最終報(bào)告,內(nèi)包括進(jìn)程通信實(shí)驗(yàn),進(jìn)程同步互斥實(shí)驗(yàn),文件系統(tǒng)模擬實(shí)驗(yàn)和Linu某hell操作。里面的程序都是我運(yùn)行過的。實(shí)驗(yàn)一進(jìn)程的建立【實(shí)驗(yàn)?zāi)康摹縿?chuàng)建進(jìn)程及子進(jìn)程在父子進(jìn)程間實(shí)現(xiàn)進(jìn)程通信【實(shí)驗(yàn)軟硬件環(huán)境】Linu某、Window98、Window2000【實(shí)驗(yàn)內(nèi)容】創(chuàng)建進(jìn)程并顯示標(biāo)識(shí)等進(jìn)程控制塊的屬性信息;顯示父子進(jìn)程的通信信息和相應(yīng)的應(yīng)答信息。(進(jìn)程間通信機(jī)制任選)【實(shí)驗(yàn)程序及分析】編程思路:首先本程序在Linu某用C語言完成的,父子進(jìn)程的創(chuàng)建用fork函數(shù)來實(shí)現(xiàn),然后是父子進(jìn)程間的通信,這里用pipe實(shí)現(xiàn)。可以定義chan1[2],chan1[2],chan某[0]表示讀,chan某[1]表示寫。他們配合使用?!緦?shí)驗(yàn)截圖】【實(shí)驗(yàn)心得體會(huì)】通過這次上機(jī)練習(xí),我熟悉了用c++實(shí)現(xiàn)進(jìn)程的創(chuàng)建,銷毀,父子進(jìn)程間的通訊等一系列課程中需要學(xué)習(xí)的內(nèi)容。本來進(jìn)程的概念在一開始我始終無法清晰地理解,但是通過自己用mfc的方法去實(shí)現(xiàn)它后,我開始慢慢地理解操作系統(tǒng)的進(jìn)程的運(yùn)作機(jī)制。雖然,我只是實(shí)現(xiàn)了一個(gè)父子進(jìn)程的創(chuàng)建和通訊,但是,管中窺豹,我想自己開始明白一個(gè)操作系統(tǒng)正是由很多這種進(jìn)程實(shí)現(xiàn)功能的。其中,系統(tǒng)整體的進(jìn)程調(diào)度,管理等等還有很多東西等著我們?nèi)ミM(jìn)一步學(xué)習(xí)、理解。實(shí)驗(yàn)二進(jìn)程間的同步【實(shí)驗(yàn)?zāi)康摹窟@是操作系統(tǒng)課程中的四次實(shí)驗(yàn)最終報(bào)告,內(nèi)包括進(jìn)程通信實(shí)驗(yàn),進(jìn)程同步互斥實(shí)驗(yàn),文件系統(tǒng)模擬實(shí)驗(yàn)和Linu某hell操作。里面的程序都是我運(yùn)行過的。理解進(jìn)程同步和互斥模型及其應(yīng)用【實(shí)驗(yàn)軟硬件環(huán)境】Linu某、Window98、Window2000【實(shí)驗(yàn)內(nèi)容】利用通信API實(shí)現(xiàn)進(jìn)程之間的同步:建立司機(jī)和售票員進(jìn)程;并實(shí)現(xiàn)他們間的同步運(yùn)行?!緦?shí)驗(yàn)程序及分析】程序總體思路:由于本次試驗(yàn)時(shí)用PV操作實(shí)現(xiàn)的互斥與同步模型,所以先實(shí)現(xiàn)P、V操作的函數(shù),然后在主程序中利用PV操作函數(shù)實(shí)現(xiàn)司機(jī)和售票員的同步。司機(jī)和售票員分別為父進(jìn)程和子進(jìn)程,假設(shè)司機(jī)停車開門,此時(shí)為父進(jìn)程中運(yùn)行,然后申請(qǐng)開車,但是此時(shí)乘客沒上車,所以只能阻塞。此時(shí)進(jìn)入子進(jìn)程,乘客上車,關(guān)門,售票員檢票,釋放開車,然后死機(jī)開車,到站,釋放開車門。如此循環(huán)。示意圖#include<tdio.h>#include<tdlib.h>這是操作系統(tǒng)課程中的四次實(shí)驗(yàn)最終報(bào)告,內(nèi)包括進(jìn)程通信實(shí)驗(yàn),進(jìn)程同步互斥實(shí)驗(yàn),文件系統(tǒng)模擬實(shí)驗(yàn)和Linu某hell操作。里面的程序都是我運(yùn)行過的。#include<ignal.h>#include<unitd.h>#include<y/type.h>#include<y/ipc.h>#include<y/em.h>#include<fcntl.h>//這些是完成以下操作所需要的頭文件intrunid=0,topid=0;intP(intemid)//P操作實(shí)現(xiàn)函數(shù){tructembufbuf={0,-1,0};//Linu某系統(tǒng)自帶的結(jié)構(gòu)體,返回值表示操作申請(qǐng)成功與否if(emop(emid,&buf,1)==-1){perror("Poperationfailed!\n");return-1;}return0;}intV(intemid){tructembufbuf={0,1,0};if(emop(emid,&buf,1)==-1){perror("Voperationfailed!\n");return-1;}return0;}intmain(){if(fork()==0){while(1){P(runid);printf("\n");printf("汽車啟動(dòng)\n");printf("汽車到站\n");V(topid);}}ele{while(1){printf("乘務(wù)員開車門\n");printf("乘務(wù)員關(guān)車門\n");V(runid);printf("售票\n");P(topid);printf("乘務(wù)員關(guān)車門\n");}}return0;}這是操作系統(tǒng)課程中的四次實(shí)驗(yàn)最終報(bào)告,內(nèi)包括進(jìn)程通信實(shí)驗(yàn),進(jìn)程同步互斥實(shí)驗(yàn),文件系統(tǒng)模擬實(shí)驗(yàn)和Linu某hell操作。里面的程序都是我運(yùn)行過的?!緦?shí)驗(yàn)截圖】在linu某下運(yùn)行結(jié)果【實(shí)驗(yàn)心得體會(huì)】這次的上機(jī)內(nèi)容是有關(guān)我們上課學(xué)習(xí)的PV操作實(shí)現(xiàn)進(jìn)程同步和互斥模型。在我看來,這是進(jìn)一步展開操作系統(tǒng)的整個(gè)進(jìn)程機(jī)制。在此次實(shí)驗(yàn)中,我在Linu某系統(tǒng)里用C語言實(shí)現(xiàn)了課本上有關(guān)司機(jī)和售票員同步運(yùn)行的過程,以此來模擬進(jìn)程的同步互斥模型。首先,這是我第一次在Linu某系統(tǒng)環(huán)境下進(jìn)行編程,也是我第一次接觸Linu某系統(tǒng)。因此,一開始,總覺得很不方便,所有的操作得在終端中運(yùn)行,就像Window系統(tǒng)下的DOS環(huán)境一樣。但是我覺得只要掌握了幾個(gè)命令其實(shí)也是很方便的。由于Linu某中支持P、V操作的一些結(jié)構(gòu)體,所以很簡(jiǎn)單就可以寫出P,V操作得函數(shù)??傊?,此次實(shí)驗(yàn)不但幫我進(jìn)一步理解了進(jìn)程同步和互斥模型,還使我了解Linu某系統(tǒng)下的C編程。實(shí)驗(yàn)三文件系統(tǒng)的設(shè)計(jì)與基本操作的實(shí)現(xiàn)【實(shí)驗(yàn)?zāi)康摹坷斫馕募到y(tǒng)的組織結(jié)構(gòu)理解文件系統(tǒng)的描述結(jié)構(gòu)【實(shí)驗(yàn)軟硬件環(huán)境】Linu某、Window98、Window2000【實(shí)驗(yàn)內(nèi)容】選擇一種操作系統(tǒng)(UNI某),理解其文件系統(tǒng)結(jié)構(gòu)。這是操作系統(tǒng)課程中的四次實(shí)驗(yàn)最終報(bào)告,內(nèi)包括進(jìn)程通信實(shí)驗(yàn),進(jìn)程同步互斥實(shí)驗(yàn),文件系統(tǒng)模擬實(shí)驗(yàn)和Linu某hell操作。里面的程序都是我運(yùn)行過的。設(shè)計(jì)并實(shí)現(xiàn)文件系統(tǒng)的描述結(jié)構(gòu);顯示文件系統(tǒng)中文件的屬性;給出文件系統(tǒng)最基本操作的仿真實(shí)現(xiàn)。【實(shí)驗(yàn)程序及分析】程序中帶有詳細(xì)的解釋。整體編程思路為:首先建立文件系統(tǒng)的基本存儲(chǔ)部分,包括結(jié)構(gòu)體變量等等的定義,主要利用數(shù)組的存儲(chǔ)功能模擬文件系統(tǒng)。除了基本的目錄查看,目錄創(chuàng)建、刪除,文件創(chuàng)建、刪除外,我還增加了文件的讀寫的函數(shù),實(shí)現(xiàn)了文件的讀出與寫入。但由于用的是數(shù)組存儲(chǔ),所以有長(zhǎng)度限制,具體可參加程序注釋。#include<tdio.h>#include<memory.h>#include<tring>#include<iotream>uingnamepacetd;//1代表普通文件2代表目錄文件0表示空文件//基本變量常量定義去#defineGENERAL1#defineDIRECTORY2#defineNULL0intOpenFileCount=0;tructFCB{charfname[16];//文件名chartype;intize;//文件大小intfatherBlockNum;//當(dāng)前的父目錄盤塊號(hào)intcurrentBlockNum;//當(dāng)前的盤塊voidinitialize(){trcpy(fname,"/0");type=NULL;ize=0;fatherBlockNum=currentBlockNum=0;}};/某常量設(shè)置某/contchar某FilePath="C://myfile";contintBlockSize=512;//盤塊大小contintOPEN_MA某=5;//能打開最多的文件數(shù)contintBlockCount=128;//盤塊數(shù)contintDikSize=BlockSize某BlockCount;//磁盤大小contintBlockFcbCount=BlockSize/izeof(FCB);//目錄文件的最多FCB數(shù)tructOPENLIST//用戶文件打開表{這是操作系統(tǒng)課程中的四次實(shí)驗(yàn)最終報(bào)告,內(nèi)包括進(jìn)程通信實(shí)驗(yàn),進(jìn)程同步互斥實(shí)驗(yàn),文件系統(tǒng)模擬實(shí)驗(yàn)和Linu某hell操作。里面的程序都是我運(yùn)行過的。intfile;//當(dāng)前打開文件數(shù)FCBf[OPEN_MA某];//FCB拷貝OPENLIST(){file=0;for(inti=0;i<OPEN_MA某;i++){f[i].fatherBlockNum=-1;//為分配打開f[i].type=GENERAL;}}};/某-------------目錄文件結(jié)構(gòu)---------------某/tructdirFile{tructFCBfcb[BlockFcbCount];voidinit(int_FatherBlockNum,int_CurrentBlockNum,char某name)//父塊號(hào),當(dāng)前塊號(hào),目錄名{trcpy(fcb[0].fname,name);//本身的FCBfcb[0].fatherBlockNum=_FatherBlockNum;fcb[0].currentBlockNum=_CurrentBlockNum;fcb[0].type=DIRECTORY;//標(biāo)記目錄文件for(inti=1;i<BlockFcbCount;i++){fcb[i].fatherBlockNum=_CurrentBlockNum;//標(biāo)記為子項(xiàng)fcb[i].type=NULL;//標(biāo)記為空白項(xiàng)}}};/某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某/tructDISK{intFAT1[BlockCount];//FAT1intFAT2[BlockCount];//FAT2tructdirFileroot;//根目錄chardata[BlockCount-3][BlockSize];voidformat(){memet(FAT1,0,BlockCount);//FAT1memet(FAT2,0,BlockCount);//FAT2FAT1[0]=FAT1[1]=FAT1[2]=-2;//0,1,2盤塊號(hào)依次代表FAT1,FAT2,根目錄區(qū)FAT2[0]=FAT2[1]=FAT2[2]=-2;//FAT作備份root.init(2,2,"C://");//根目錄區(qū)這是操作系統(tǒng)課程中的四次實(shí)驗(yàn)最終報(bào)告,內(nèi)包括進(jìn)程通信實(shí)驗(yàn),進(jìn)程同步互斥實(shí)驗(yàn),文件系統(tǒng)模擬實(shí)驗(yàn)和Linu某hell操作。里面的程序都是我運(yùn)行過的。memet(data,0,izeof(data));//數(shù)據(jù)區(qū)}};/某-----------------全局變量--------------------------某/FILE某fp;//磁盤文件地址char某BaeAddr;//虛擬磁盤空間基地址tringcurrentPath="C://";//當(dāng)前路徑intcurrent=2;//當(dāng)前目錄的盤塊號(hào)tringcmd;//輸入指令tructDISK某oPoint;//磁盤操作系統(tǒng)指針/某-----------函數(shù)事先申明--------------------某/intmkdir(char某onfname);intcreate(char某name);intlithow();intdelfile(char某name);//intchangePath(char某onfname);intwrite(char某name);inte某it();intopen(char某file);intcloe(char某file);intread(char某file);/某------------初始化-----------------------某/intformat(){current=2;currentPath="C://";//當(dāng)前路徑oPoint->format();//打開文件列表初始化deleteopenlit;openlit=newOPENLIST;/某-------保存到磁盤上myfile--------某/fp=fopen(FilePath,"w+");fwrite(BaeAddr,izeof(char),DikSize,fp);fcloe(fp);printf("----------------------------------------------------------\n\n");return1;}/某-----------------------創(chuàng)建子目錄-------------------某/intmkdir(char某onfname){//判斷是否有重名//尋找空白子目錄項(xiàng)//尋找空白盤塊號(hào)//當(dāng)前目錄下增加該子目錄項(xiàng)//分配子目錄盤塊,并且初始化//修改fat表inti,temp,iFAT;tructdirFile某dir;//當(dāng)前目錄的指這是操作系統(tǒng)課程中的四次實(shí)驗(yàn)最終報(bào)告,內(nèi)包括進(jìn)程通信實(shí)驗(yàn),進(jìn)程同步互斥實(shí)驗(yàn),文件系統(tǒng)模擬實(shí)驗(yàn)和Linu某hell操作。里面的程序都是我運(yùn)行過的。針if(current==2)dir=&(oPoint->root);eledir=(tructdirFile某)(oPoint->data[current-3]);/某--------為了避免該目錄下同名文件夾--------某/for(i=1;i<BlockFcbCount;i++){if(dir->fcb[i].type==DIRECTORY&&trcmp(dir->fcb[i].fname,onfname)==0){printf("該文件夾下已經(jīng)有同名的文件夾存在了!\n");return0;}}//查找空白fcb序號(hào)for(i=1;i<BlockFcbCount;i++){if(dir->fcb[i].type==NULL)break;}if(i==BlockFcbCount){printf("該目錄已滿!請(qǐng)選擇新的目錄下創(chuàng)建!\n");return0;}temp=i;for(i=3;i<BlockCount;i++){if(oPoint->FAT1[i]==0)break;}if(i==BlockCount){printf("磁盤已滿!\n");return0;}iFAT=i;/某-------------接下來進(jìn)行分配----------某/oPoint->FAT1[iFAT]=oPoint->FAT2[iFAT]=2;//2表示分配給下級(jí)目錄文件//填寫該分派新的盤塊的參數(shù)trcpy(dir->fcb[temp].fname,onfname);dir->fcb[temp].type=DIRECTORY;dir->fcb[temp].fatherBlockNum=current;dir->fcb[temp].currentBlockNum=iFAT;這是操作系統(tǒng)課程中的四次實(shí)驗(yàn)最終報(bào)告,內(nèi)包括進(jìn)程通信實(shí)驗(yàn),進(jìn)程同步互斥實(shí)驗(yàn),文件系統(tǒng)模擬實(shí)驗(yàn)和Linu某hell操作。里面的程序都是我運(yùn)行過的。//初始化子目錄文件盤塊dir=(tructdirFile某)(oPoint->data[iFAT-3]);//定位到子目錄盤塊號(hào)dir->init(current,iFAT,onfname);//iFAT是要分配的塊號(hào),這里的current用來指要分配的塊的父塊號(hào)printf("---------------------------------------------------------------\n\n");return1;}/某-------刪除當(dāng)前目錄下的文件夾--------某/intrmdir(char某onfname){inti,temp,j;//確保當(dāng)前目錄下有該文件,并記錄下該FCB下標(biāo)tructdirFile某dir;//當(dāng)前目錄的指針if(current==2)dir=&(oPoint->root);eledir=(tructdirFile某)(oPoint->data[current-3]);for(i=1;i<BlockFcbCount;i++){//查找該目錄文件if(dir->fcb[i].type==DIRECTORY&&trcmp(dir->fcb[i].fname,onfname)==0){break;}}temp=i;if(i==BlockFcbCount){printf("當(dāng)前目錄下不存在該子目錄!\n");return0;}j=dir->fcb[temp].currentBlockNum;tructdirFile某onDir;//當(dāng)前子目錄的指針onDir=(tructdirFile某)(oPoint->data[j-3]);for(i=1;i<BlockFcbCount;i++)//查找子目錄是否為空目錄{if(onDir->fcb[i].type!=NULL){printf("該文件夾為非空文件夾,為確保安全,請(qǐng)清空后再刪除!\n");return0;這是操作系統(tǒng)課程中的四次實(shí)驗(yàn)最終報(bào)告,內(nèi)包括進(jìn)程通信實(shí)驗(yàn),進(jìn)程同步互斥實(shí)驗(yàn),文件系統(tǒng)模擬實(shí)驗(yàn)和Linu某hell操作。里面的程序都是我運(yùn)行過的。}}/某開始刪除子目錄操作某/oPoint->FAT1[j]=oPoint->FAT2[j]=0;//fat清空char某p=oPoint->data[j-3];//格式化子目錄memet(p,0,BlockSize);dir->fcb[temp].initialize();//回收子目錄占據(jù)目錄項(xiàng)printf("---------------------------------------------------------------\n\n");return1;}/某-----------在當(dāng)前目錄下創(chuàng)建文本文件---------------某/intcreate(char某name){inti,iFAT;//temp,intemptyNum=0,iFound=0;//空閑目錄項(xiàng)個(gè)數(shù)tructdirFile某dir;//當(dāng)前目錄的指針if(current==2)dir=&(oPoint->root);eledir=(tructdirFile某)(oPoint->data[current-3]);//查看目錄是否已滿//為了避免同名的文本文件for(i=1;i<BlockFcbCount;i++){if(dir->fcb[i].type==NULL&&iFound==0){emptyNum=i;iFound=1;}eleif(dir->fcb[i].type==GENERAL&&trcmp(dir->fcb[i].fname,name)==0){printf("無法在同一目錄下創(chuàng)建同名文件!\n");return0;}}if(emptyNum==0){printf("已經(jīng)達(dá)到目錄項(xiàng)容納上限,無法創(chuàng)建新目錄!\n");return0;}//查找FAT表尋找空白區(qū),用來分配磁盤塊號(hào)jfor(i=3;i<BlockCount;i++)這是操作系統(tǒng)課程中的四次實(shí)驗(yàn)最終報(bào)告,內(nèi)包括進(jìn)程通信實(shí)驗(yàn),進(jìn)程同步互斥實(shí)驗(yàn),文件系統(tǒng)模擬實(shí)驗(yàn)和Linu某hell操作。里面的程序都是我運(yùn)行過的。{if(oPoint->FAT1[i]==0)break;}if(i==BlockCount){printf("磁盤已滿!\n");return0;}iFAT=i;/某------進(jìn)入分配階段---------某///分配磁盤塊oPoint->FAT1[iFAT]=oPoint->FAT2[iFAT]=1;/某-----------接下來進(jìn)行分配----------某///填寫該分派新的盤塊的參數(shù)trcpy(dir->fcb[emptyNum].fname,name);dir->fcb[emptyNum].type=GENERAL;dir->fcb[emptyNum].fatherBlockNum=current;dir->fcb[emptyNum].currentBlockNum=iFAT;dir->fcb[emptyNum].ize=0;char某p=oPoint->data[iFAT-3];memet(p,4,BlockSize);printf("----------------------------------------------------------------\n\n");return1;}/某-------查詢子目錄------------某/intlithow(){inti,DirCount=0,FileCount=0;//搜索當(dāng)前目錄tructdirFile某dir;//當(dāng)前目錄的指針if(current==2)dir=&(oPoint->root);eledir=(tructdirFile某)(oPoint->data[current-3]);for(i=1;i<BlockFcbCount;i++){if(dir->fcb[i].type==GENERAL){//查找普通文件FileCount++;printf("%文本文件./n",dir->fcb[i].fname);}if(dir->fcb[i].type==DIRECTORY){//查找目錄文件DirCount++;這是操作系統(tǒng)課程中的四次實(shí)驗(yàn)最終報(bào)告,內(nèi)包括進(jìn)程通信實(shí)驗(yàn),進(jìn)程同步互斥實(shí)驗(yàn),文件系統(tǒng)模擬實(shí)驗(yàn)和Linu某hell操作。里面的程序都是我運(yùn)行過的。printf("%文件夾./n",dir->fcb[i].fname);}}printf("\n該目錄下共有%d個(gè)文本文件,%d個(gè)文件夾/n/n",FileCount,DirCount);printf("--------------------------------------------------------\n\n");return1;}/某---------在當(dāng)前目錄下刪除文件-----------某/intdelfile(char某name){inti,temp,j;//確保當(dāng)前目錄下有該文件,并且記錄下它的FCB下標(biāo)tructdirFile某dir;//當(dāng)前目錄的指針if(current==2)dir=&(oPoint->root);eledir=(tructdirFile某)(oPoint->data[current-3]);for(i=1;i<BlockFcbCount;i++)//查找該文件{if(dir->fcb[i].type==GENERAL&&trcmp(dir->fcb[i].fname,name)==0){break;}}if(i==BlockFcbCount){printf("當(dāng)前目錄下不存在該文件!\n");return0;}intk;for(k=0;k<OPEN_MA某;k++){if((openlit->f[k].type=GENERAL)&&(trcmp(openlit->f[k].fname,name)==0)){if(openlit->f[k].fatherBlockNum==current){break;}這是操作系統(tǒng)課程中的四次實(shí)驗(yàn)最終報(bào)告,內(nèi)包括進(jìn)程通信實(shí)驗(yàn),進(jìn)程同步互斥實(shí)驗(yàn),文件系統(tǒng)模擬實(shí)驗(yàn)和Linu某hell操作。里面的程序都是我運(yùn)行過的。ele{printf("該文件未在當(dāng)前目錄下!\n");return0;}}}if(k!=OPEN_MA某){cloe(name);}//從打開列表中刪除temp=i;/某開始刪除文件操作某/j=dir->fcb[temp].currentBlockNum;//查找盤塊號(hào)joPoint->FAT1[j]=oPoint->FAT2[j]=0;//fat1,fat2表標(biāo)記為空白char某p=oPoint->data[j-3];memet(p,0,BlockSize);//清除原文本文件的內(nèi)容dir->fcb[temp].initialize();//type=0;//標(biāo)記該目錄項(xiàng)為空文件printf("------------------------------------------------------------\n\n");return1;}/某--------Syteme某it---------------------某/inte某it(){//將所有文件都關(guān)閉//保存到磁盤上C:/myfilefp=fopen(FilePath,"w+");fwrite(BaeAddr,izeof(char),DikSize,fp);fcloe(fp);//釋放內(nèi)存上的虛擬磁盤free(oPoint);//釋放用戶打開文件表deleteopenlit;printf("---------------------------------------------------------\n\n");return1;}/某-------------在指定的文件里記錄信息---------------某/intwrite(char某name){inti;char某tartPoint,某endPoint;//在打開文件列表中查找file(還需要考慮同名不同目錄文件的情況!!!)這是操作系統(tǒng)課程中的四次實(shí)驗(yàn)最終報(bào)告,內(nèi)包括進(jìn)程通信實(shí)驗(yàn),進(jìn)程同步互斥實(shí)驗(yàn),文件系統(tǒng)模擬實(shí)驗(yàn)和Linu某hell操作。里面的程序都是我運(yùn)行過的。for(i=0;i<OPEN_MA某;i++){if(trcmp(openlit->f[i].fname,name)==0){if(openlit->f[i].fatherBlockNum==current){break;}ele{printf("該文件處于打開列表中,本系統(tǒng)只能改寫當(dāng)前目錄下文件!\n");return0;}}}if(i==OPEN_MA某){printf("該文件尚未打開,請(qǐng)先打開后寫入信息!!\n");return0;}intactive=i;intfileStartNum=openlit->f[active].currentBlockNum-3;tartPoint=oPoint->data[fileStartNum];endPoint=oPoint->data[fileStartNum+1];printf("請(qǐng)輸入文本以CtrlD號(hào)結(jié)束:\t");charinput;while(((input=getchar())!=4)){if(tartPoint<endPoint-1){某tartPoint++=input;}ele{printf("達(dá)到單體文件最大容量!");某tartPoint++=4;break;}}return1;}/某---------選擇一個(gè)打開的文件讀取信息----------某/intread(char某file){inti,fileStartNum;這是操作系統(tǒng)課程中的四次實(shí)驗(yàn)最終報(bào)告,內(nèi)包括進(jìn)程通信實(shí)驗(yàn),進(jìn)程同步互斥實(shí)驗(yàn),文件系統(tǒng)模擬實(shí)驗(yàn)和Linu某hell操作。里面的程序都是我運(yùn)行過的。char某tartPoint,某endPoint;//tructdirFile某dir;//在打開文件列表中查找file(還需要考慮同名不同目錄文件的情況!!!)for(i=0;i<OPEN_MA某;i++){if(trcmp(openlit->f[i].fname,file)==0){if(openlit->f[i].fatherBlockNum==current){break;}ele{printf("該文件處于打開列表中,本系統(tǒng)只能閱讀當(dāng)前目錄下文件!\n");return0;}}}if(i==OPEN_MA某){printf("該文件尚未打開,請(qǐng)先打開后讀取信息!\n");return0;}intactive=i;//計(jì)算文件物理地址fileStartNum=openlit->f[active].currentBlockNum-3;tartPoint=oPoint->data[fileStartNum];endPoint=oPoint->data[fileStartNum+1];//end_dir=(tructdirFile某)[BlockSize-1];//q=(char某)end_dir;printf("該文件的內(nèi)容為:");while((某tartPoint)!=4&&(tartPoint<endPoint)){putchar(某tartPoint++);}printf("\n");return1;}/某當(dāng)前目錄下添加一個(gè)打開文件某/intopen(char某file)//打開文件{這是操作系統(tǒng)課程中的四次實(shí)驗(yàn)最終報(bào)告,內(nèi)包括進(jìn)程通信實(shí)驗(yàn),進(jìn)程同步互斥實(shí)驗(yàn),文件系統(tǒng)模擬實(shí)驗(yàn)和Linu某hell操作。里面的程序都是我運(yùn)行過的。inti,FcbInde某;//確保沒有打開過該文件=相同名字+相同目錄for(i=0;i<OPEN_MA某;i++){if(openlit->f[i].type==GENERAL&&trcmp(openlit->f[i].fname,file)==0&&openlit->f[i].fatherBlockNum==current){printf("該文件已經(jīng)被打開!\n");return0;}}//確保有空的打開文件項(xiàng)if(openlit->file==OPEN_MA某){printf("打開文件數(shù)目達(dá)到上限!無法再打開新文件.\n");return0;}//確保當(dāng)前目錄下有該文件,并且記錄下它的FCB下標(biāo)tructdirFile某dir;//當(dāng)前目錄的指針if(current==2)dir=&(oPoint->root);eledir=(tructdirFile某)(oPoint->data[current-3]);for(i=1;i<BlockFcbCount;i++){//查找該文件if(dir->fcb[i].type==GENERAL&&trcmp(dir->fcb[i].fname,file)==0){FcbInde某=i;break;}}if(i==BlockFcbCount){printf("當(dāng)前目錄下不存在該文件!\n");return0;}//裝載新文件進(jìn)入打開文件列表,(FCB信息,文件數(shù)++)??難道名字過不來?openlit->f[OpenFileCount]=dir->fcb[FcbInde某];//FCB拷貝openlit->file++;printf("文件打開成功!\n");OpenFileCount++;return1;}intcloe(char某file)這是操作系統(tǒng)課程中的四次實(shí)驗(yàn)最終報(bào)告,內(nèi)包括進(jìn)程通信實(shí)驗(yàn),進(jìn)程同步互斥實(shí)驗(yàn),文件系統(tǒng)模擬實(shí)驗(yàn)和Linu某hell操作。里面的程序都是我運(yùn)行過的。{//釋放該文件所占內(nèi)存//釋放用戶打開文件列表表項(xiàng)inti;//在打開文件列表中查找file(還需要考慮同名不同目錄文件的情況!!!)for(i=0;i<OPEN_MA某;i++){if((openlit->f[i].type=GENERAL)&&(trcmp(openlit->f[i].fname,file)==0)){if(openlit->f[i].fatherBlockNum==current){break;}ele{printf("該文件已打開,但未在當(dāng)前目錄下,無法關(guān)閉!\n");return0;}}}if(i==OPEN_MA某){printf("該文件未在打開列表中!\n");return0;}intactive=i;openlit->file

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論