第一篇:操作系統實習報告(磁盤文件操作)
大學
操作系統課程綜合實踐
題目:
磁盤文件操作
班級:
姓名:
學號:
指導教師:
2011年 12 月 23日
磁盤文件操作
摘要:
為了正確地實現文件的存取,文件系統設計了一組與存取文件有關的功能模塊,用戶可以用“訪問指令”調用這些功能模塊,以實現文件的存取要求。我們把文件系統設計的這一組功能模塊稱為“文件操作“,實驗就是要模擬實現一些文件操作。文件操作不是獨立的,它和文件系統的其他部分密切相關,若要實現文件操作就離不開文件的目錄結構、文件的組織結構和磁盤空間的管理。因此,這個實習雖然是文件操作的模擬實現,但還是必須模擬一部分文件的組織結構、目錄結構和磁盤空間管理的實現。
關鍵字:磁盤、文件、目錄、分配表。
一、實驗內容:
設計一個簡單的文件系統,用文件模擬磁盤,用數組模擬緩沖區,要求實現; 1. 2. 3. 4. 支持多級目錄結構,支持文件的絕對路徑;
文件的邏輯結構采用流式結構,物理結構采用鏈接結構中的顯示鏈接方式;
采用文件分配表;
實現的命令包括建立目錄、列目錄、刪除空目錄、建立文件、刪除文件、顯示文件內容、打開文件、讀文件、寫文件(追加方式)、關閉文件、改變文件屬性。
最后編寫主函數對所做工作進行測試。
二、實驗目的:1、2、3、4、文件的操作。
文件的邏輯結構和物理結構 磁盤空間的管理 磁盤目錄結構
三、實驗環境: Windows XP、VC++
四、程序運行結果(詳圖):
程序運行的主界面:用戶運行命令7-建立目錄
用戶運行命令1-建立文件:
顯示目錄內容:
打開文件:
寫文件:
關閉文件:
再次顯示目錄內容:
以上為程序的運行的部分截圖。
五、程序清單: #define false 0 #define true 1 #include “stdio.h” //#include
char name[3];/*文件或目錄名*/ char type[2];/*文件類型名*/ char attribute;/*屬性*/ char address;/*文件或目錄的起始盤塊號*/ char length;/*文件長度,以盤塊為單位*/ }content;/*目錄結構*/ #define n 5 /*模擬實驗中系統允許打開文件的最大數量*/ typedef struct { int dnum;/*磁盤盤塊號*/ int bnum;/*盤塊內第幾項*/ }pointer;/*已打開文件表中讀寫指針的結構*/ typedef struct {
char name[20];/*文件絕對路徑名*/ char attribute;/*文件的屬性,用1個字節表示,所以用了char類型*/ int number;/*文件起始盤塊號*/ int length;/*文件長度,文件占用的字節數*/ int flag;/*操作類型,用“0”表示以讀操作方式開文件,用“1”表示寫操作pointer read;/*讀文件的位置,文件剛打開時dnum為文件起始盤塊號,bnumpointer write;/*寫文件的位置,文件建立時dnum為文件起始盤塊號,bnum方式打開文件*/ 為“0”*/ 為“0”,打開時為文件末尾*/ }OFILE;/*已打開文件表項類型定義*/ struct {
char buffer1[64];/*模擬緩沖1*/ content buffer2[8];/*模擬緩沖2*/ FILE *fc;/*模擬磁盤的文件指針*/
void copen(OFILE *x1,OFILE *x2)//OFILE *x1,*x2;{
} strcpy(x1->name,x2->name);x1->attribute=x2->attribute;x1->number=x2->number;x1->length=x2->length;x1->flag=x2->flag;x1->read.dnum=x2->read.dnum;x1->read.bnum=x2->read.bnum;x1->write.dnum=x2->write.dnum;x1->write.bnum=x2->write.bnum;OFILE file[n];/*已打開文件表*/ int length;/*已打開文件表中登記的文件數量*/ }openfile;/*已打開文件表定義*/
int sopen(char *name)/*在已打
開
文
件
表
中
查
找
文
件//P172 //char *name;{
void dopen(char *name)/*在已打開文件表中刪除文件name*/ //char *name;{
int iopen(content *x)/*在已打開文件表中插入文件name*/ //content *x;{ int i;i=sopen(name);if(i==-1){
} copen(&openfile.file[i],&openfile.file[openfile.length-1]);openfile.length--;printf(“文件未打開n”);else int i;i=0;while(i name*/ 依次查找已打開文件表*/ if(i>=openfile.length)return(i);}/*查找sopen函數結束*/ }/*刪除函數結束*/ int i;i=sopen(x->name);if(i!=-1){ } else if(openfile.length==n){ } else { } //copen(&openfile.file[openfile.length],x);openfile.length++;return(true);printf(“已打開文件表已滿n”);return(false);printf(“文件已經打開n”);return(false);}/*填寫已打開文件表函數結束*/ int allocate()/*分配一個磁盤塊,返回塊號*/ { */ //P173 int i;fseek(fc,0,SEEK_SET);/*將模擬磁盤的文件指針移至模擬磁盤FAT表*/ fread(buffer1,64L,1,fc);/*將FAT表中第一個磁盤塊讀入模擬緩沖for(i=3;i<63;i++)if(buffer1[i]==0){ /*FAT中的第i項為0,分配第i塊磁盤塊,修改FAT表,并且寫回磁盤buffer1中*/ buffer1[i]=255; } fseek(fc,0,SEEK_SET);fwrite(buffer1,64L,1,fc);return(i);/*返回磁盤號*/ fread(buffer1,64L,1,fc);/*將FAT表中第二個磁盤塊讀入模擬緩沖for(i=0;i<63;i++) if(buffer1[i]==0){/*FAT中的第i項為0,分配第i+64塊磁盤塊,修改FAT表,并且寫 } printf(“已經沒有磁盤空間n”);return(false);buffer1[i]=255;fseek(fc,-64L,SEEK_CUR);fwrite(buffer1,64L,1,fc);return(i+64);/*返回磁盤號*/ buffer1中*/ 回磁盤*/ }/*分配磁盤塊函數結束*/ int read_file(char *name,int length)/*讀文件函數,文件路徑名name,讀取長度length*/ //char *name;//int length;{ int i,t;//char ch;if((i=sopen(name))==-1){ } if(openfile.file[i].flag==1){ printf(“文件以寫方式打開,不能讀n”);printf(“文件沒有打開或不存在n”);return(false); } return 0;t=0;fseek(fc,openfile.file[i].read.dnum*64L,SEEK_SET);fread(buffer1,64,1,fc);while(t openfile.file[i].read.dnum=buffer1[openfile.file[i].read.dnum%64] } } t++;openfile.file[i].read.bnum=0;fseek(fc,openfile.file[i].read.dnum*64L,SEEK_SET);fread(buffer1,64,1,fc);/*讀取下一個*/ putchar(buffer1[openfile.file[i].read.bnum]);/*讀出一個字符(這if((t+1)%64==0)putchar('n');/*修改讀指針*/ openfile.file[i].read.bnum++;if(openfile.file[i].read.bnum>=64)/*一塊讀完,讀取下一個盤塊*/ { fseek(fc,openfile.file[i].read.dnum/64*64, SEEK_SET);fread(buffer1,64,1,fc);里是在屏幕上顯示)*/;/*修改讀指針*/ }/*讀函數結束*/ int write_file(char *name,char *buff,int length)//P174 /*寫文件函數*/ //char *name;/*文件路徑名*/ //char *buff;/*存放準備寫入磁盤的內容*/ //int length;/*寫入內容的長度*/ { int i,t,dd;if((i=sopen(name))==-1)/*文件不存在,無法寫*/ { } if(openfile.file[i].flag==0){ } t=0;fseek(fc,openfile.file[i].write.dnum*64L, SEEK_SET);fread(buffer1,64,1,fc);while(t buffer1[openfile.file[i].write.bnum]=buff[t];openfile.file[i].write.bnum++;openfile.file[i].length++;if(openfile.file[i].write.bnum>=64){ fseek(fc, openfile.file[i].write.dnum*64L, SEEK_SET);fwrite(buffer1,64,1,fc);/*一塊寫完,寫回磁盤*/ if((dd=allocate())==false){ openfile.file[i].write.bnum--;openfile.file[i].length--;printf(“無磁盤空間,部分信息丟失,寫失敗n”);return(false);printf(“文件以讀方式打開,不能寫n”);return(false);printf(“文件沒有打開或不存在n”);return(false);}/*if*/ fseek(fc,openfile.file[i].write.dnum/64*64L, SEEK_SET);fread(buffer1,64,1,fc);buffer1[openfile.file[i].write.dnum%64]=dd;fseek(fc,openfile.file[i].write.dnum/64*64L, SEEK_SET); fwrite(buffer1,64,1,fc);openfile.file[i].write.dnum=dd;openfile.file[i].write.bnum=0;}/*if*/ t++;}/*while*/ fseek(fc, openfile.file[i].write.dnum*64L, SEEK_SET);fwrite(buffer1,64,1,fc);/*一塊寫完,寫回磁盤*/ }/*寫函數結束*/ int search(char *name,int flag,int *dnum,int *bnum)/*查找路徑名為name的文件或目錄,返回該目錄的起始盤塊號 */ //char *name;//int flag;/*flag=8表示查找目錄,否則為文件*/ //int *dnum,*bnum;/*返回找到文件或目錄的目錄項的位置:盤塊dnum中第bnum項*/ { for(s=0;name[k]!='.'&&name[k]!='/'&&s<3&&name[k]!='
主站蜘蛛池模板:
亚洲理论电影在线观看|
中文字幕av一区|
亚洲熟妇无码一区二区三区|
99久久国产精品免费高潮|
老司机在线ae85|
少妇高潮一区二区三区99|
国产女主播精品大秀系列|
日韩亚洲国产主播在线不卡|
亚洲国产精品久久一线app|
久久免费99精品国产自在现线|
亚洲爆乳精品无码一区二区三区|
久久久无码精品一区二区三区|
国产乱人伦偷精品视频麻豆|
亚洲不卡中文字幕无码|
久久av无码精品人妻糸列|
免费特级毛片|
国产精品99久久久久久久女警|
日韩一区二区三区无码a片|
精品亚洲国产成人av制服|
天天躁日日摸久久久精品|
九九在线精品国产|
国产v精品成人免费视频|
少妇高潮惨叫喷水在线观看|
久久久久亚洲AV色欲av|
午夜国产亚洲精品一区|
中文字幕在线播放|
国产乱人伦偷精品视频不卡|
香港三级午夜理论三级|
51被公侵犯玩弄漂亮人妻|
国产av一区二区三区日韩|
男人扒开女人双腿猛进女人|
青青草原综合久久大伊人精品|
一本无码人妻在中文字幕免费|
影音先锋无码a∨男人资源站|
少妇性l交大片7724com|
av无码天堂一区二区三区|
人妻少妇精品无码专区app|
九九视频国产免|
中文字幕在线精品视频入口一区|
亚洲第一综合网址网址|
熟妇人妻一区二区三区四区|