版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、精選文檔實驗六:文件系統(tǒng)一、目的要求1、用高級語言編寫和調(diào)試一個簡單的文件系統(tǒng),模擬文件管理的工作過程。從而對各種文件操作命令的實質(zhì)內(nèi)容和執(zhí)行過程有比較深入的了解。 2、要求設計一個 n個用戶的文件系統(tǒng),每次用戶可保存m個文件,用戶在一次運行中只能打開一個文件,對文件必須設置保護措施,且至少有Create、delete、open、close、read、write等命令。二、例題: 設計一個10個用戶的文件系統(tǒng),每次用戶可保存10個文件,一次運行用戶可以打開5個文件。 程序采用二級文件目錄(即設置主目錄MFD)和用戶文件目錄(UED)。另外,為打開文件設置了運行文件目錄(AFD)。 為了便于實現(xiàn)
2、,對文件的讀寫作了簡化,在執(zhí)行讀寫命令時,只需改讀寫指針,并不進行實際的讀寫操作。 算法與框圖: a、因系統(tǒng)小,文件目錄的檢索使用了簡單的線性搜索。 b、文件保護簡單使用了三位保護碼:允許讀寫執(zhí)行、對應位為 1,對應位為0,則表示不允許讀寫、執(zhí)行。 c、程序中使用的主要設計結(jié)構(gòu)如下: 、主文件目錄和用戶文件目錄( MFD、UFD) 、打開文件目錄( AFD)(即運行文件目錄)M D F用戶名 文件目錄指針 用戶名 文件目錄指針 U F D文件名 保護碼 文件長度 文件名 A F D打開文件名 打開保護碼 讀寫指針 三、調(diào)度算法的流程圖四、文件管理源程序#include#include#incl
3、ude#includetypedef struct ufd char filename10;/*文件名*/ char procode8;/*屬性*/ int length;/*文件長度*/ struct ufd *nextfile;/*指向下一個文件*/UFD;typedef struct mfd char username10;/*用戶名*/ struct ufd *link;/*指向該用戶的第一個文件*/MFD;typedef struct protected_flag char code4;PRO;typedef struct afd/*運行文件目錄*/ char filename10;
4、/*打開文件名*/ char procode4; int rwpointer;/*讀寫指針*/AFD;PRO flag3=100,/*只讀*/110,/*讀寫*/001/*可執(zhí)行*/;UFD *rw_pointer;/*讀寫指針*/AFD *afd=NULL;MFD filesystem10;int num;/*當前用戶個數(shù)*/void displayallfile() int i; UFD *p; for(i=0;ifilename); printf(文件屬性: %st|,p-procode);printf(文件長度: %dnn,p-length);p=p-nextfile; void in
5、put() /*建立用戶文件系統(tǒng)*/ int i,j; int length; char filename10; char procode4; UFD *p1,*p2,*first; for(i=0;i10;i+) filesystemi.link=NULL; printf(用戶號碼:n); scanf(%d,&num); for(i=0;inum;i+)/*輸入各用戶名稱*/ printf(輸入第 %d個用戶名:n,i+1); scanf(%s,filesystemi.username); for(i=0;inextfile=NULL;strcpy(first-filename,filena
6、me);strcpy(first-procode,procode);first-length=length;p1=p2=first;j+;while(1) printf(文件 %d:n,j); printf(長度 :); scanf(%d,&length);if(!length)break; printf(文件名:);scanf(%s,filename);printf(屬性(100只讀,110讀寫,001可執(zhí)行):);scanf(%s,procode);p2=(UFD*)malloc(sizeof(UFD);p2-nextfile=NULL;strcpy(p2-filename,filenam
7、e);strcpy(p2-procode,procode); p2-length=length;j+;p1-nextfile=p2; p1=p1-nextfile; filesystemi.link=first; displayallfile();int findusername(char * username)/*返回用戶名下標,當I=NUM時,用戶不存在*/ int i; i=0; while(ifilename) k=k-nextfile; return k;void displayfile(UFD *link) UFD *p; p=link; if(!p)printf(n此目錄沒有該文
8、件!);return;printf(n用戶文件如下:n); while(p)printf(%st|,p-filename);printf(%st|,p-procode);printf(%dnn,p-length);p=p-nextfile;void createfile() char username10; char filename10; int i; UFD *p1,*p2,*newfile; if(num=10)/*用戶文件目錄已滿,創(chuàng)建文件失敗*/ printf(用戶文件目錄已滿n創(chuàng)建文件失敗!n); return; printf(輸入用戶名:n); scanf(%s,username
9、); i=findusername(username);/*返回用戶名下標*/ if(i=num)/*如果該用戶不存在,且用戶個數(shù)不小于10,先創(chuàng)建用戶再建立用戶文件*/ printf(用戶不存在,請建立用戶!n); strcpy(filesystemnum.username ,username);/*創(chuàng)建用戶目錄*/ num+; newfile =(UFD *)malloc(sizeof(UFD); newfile-nextfile=NULL; filesystemnum-1.link=newfile; printf(文件名:); scanf(%s,filesystemnum-1.link-
10、filename); printf(n屬性:); scanf(%s,filesystemnum-1.link-procode); printf(n長度:); scanf(%d,&(filesystemnum-1.link-length); printf(n文件已創(chuàng)建!n); else/*為已存在的用戶建立文件*/ p1=p2=filesystemi.link ; printf(輸入文件名:); scanf(%s,filename);while(p2) if (!strcmp(p2-filename,filename) printf(文件名已存在,請輸入新文件名!n); scanf(%s,fil
11、ename); p1=p2;p2=p2-nextfile; newfile=(UFD *)malloc(sizeof(UFD); newfile-nextfile=NULL; strcpy(newfile-filename,filename);printf(n屬性:); scanf(%s,newfile-procode);printf(n長度:);scanf(%d,&(newfile-length);p1-nextfile=newfile;/printf(n文件已創(chuàng)建!n);displayallfile();void displayuser()/*顯示用戶目錄*/int i; if(num=0
12、) return; printf(n用戶目錄如下! ); for(i=0;i=num) printf(用戶不存在!n刪除失敗!); return ; else printf(n輸入文件名:);scanf(%s,filename); p1=p2=filesystemi.link; while(p2&strcmp(p2-filename,filename) p1=p2; p2=p2-nextfile; if(!p2)printf(n文件不存在!n刪除失敗!n);else if(p1=p2)filesystemi.link=p1-nextfile; elsep1-nextfile=p2-nextfi
13、le; delete(p2); printf(文件已刪除!n);displayallfile();AFD * openfile() char username10; char filename10; int i; UFD *p=NULL; AFD *k=NULL;/*為打開的文件設置了運行文件目錄*/ printf(輸入用戶名:n); scanf(%s,username); i=findusername(username);/*返回用戶名下標*/ if(i=num) printf(n用戶不存在!n不能打開文件!n); return NULL; else/*用戶存在*/ printf(n輸入文件
14、名:); scanf(%s,filename); p=findfilename(filename,filesystemi.link); if(!p)/*用戶文件不存在*/ printf(n文件不存在!n); return NULL; elseafd=(AFD *)malloc(sizeof(AFD); strcpy(afd-filename,p-filename); strcpy(afd-procode,p-procode); afd-rwpointer=0; printf(n文件已打開!n); rw_pointer=p;/*為了讀文件保留指針*/ printf(t文件目錄AFD:n); /*
15、打開運行文件目錄AFD*/ printf(t文件名 : %sn,afd-filename); printf(t屬性 : %sn,afd-procode); printf(t讀寫指針 : %dn,afd-rwpointer); return afd; void closefile() if(!afd)printf(n沒有文件打開!n);return; delete(afd);afd=NULL;printf(n文件已關(guān)閉!n);void readfile()/AFD *p; p=openfile();if(!p)return;if(strcmp(p-procode,100)&strcmp(p-pr
16、ocode,110)printf(nfile:%s 文件不可讀!n,p-filename);/*操作*/elseprintf(已讀取文件!n);printf(t文件名:%sn,p-filename); printf(t屬性:%sn,p-procode); printf(t讀寫指針:%dn,rand()%rw_pointer-length); closefile();/*關(guān)閉文件*/void writefile()AFD *p;/*運行文件目錄*/UFD *k;p=openfile();k=rw_pointer;if(!p)return;if(strcmp(p-procode,110)print
17、f(nfile:%s 該文件不能寫!n,p-filename);return; else p-rwpointer=rand()%k-length;k-length=p-rwpointer ;/*修改讀書指針寫回文件*/printf(n已完成寫操作!n);printf(t文件名 : %sn,k-filename); printf(t屬性 : %sn,k-procode); printf(t長度 : %dn,k-length);closefile(); void executefile()AFD *p;p=openfile();if(!p)printf(n文件不存在!n);return;if(st
18、rcmp(p-procode,001)printf(n該文件不能執(zhí)行!n);printf(n文件屬性為不可執(zhí)行文件!n);return;elseclosefile();printf(n文件執(zhí)行完畢!); void menu()printf(-n);printf( n);printf(-n);printf( MENU :n);printf(ttmenu-顯示菜單n);printf(ttopen-打開文件n);printf(ttclose-關(guān)閉文件n);printf(ttcreate-創(chuàng)建文件n);printf(ttread-讀文件n);printf(ttwrite-寫文件n);printf(ttexecute-執(zhí)行文件n);printf(ttdelete-刪除文件n);printf(ttdisplay-顯示文件列表n);printf(ttexit-退出n);printf(t注意:輸入時當文件長度為0時表示該用戶的文件輸入結(jié)束!n);printf(-n);void fileoperation()/*文件基本操作*/char str10;int sort;while(1)printf(輸入命令:n);printf();scanf(%s,str);if(!strcmp(str,create
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025云南昆華醫(yī)院投資管理有限公司(云南新昆華醫(yī)院)招聘3人備考題庫完美版
- 2025伊犁州公安局招聘警務輔助人員(266人)備考題庫及答案1套
- 2025北京醫(yī)科大學附屬小學招聘5人備考題庫新版
- 2025四川成都市雙慶中學校面向社會招聘頂崗教師2人參考題庫附答案
- 2025山東德州市樂陵市市屬國有企業(yè)招聘筆試參考題庫必考題
- 2025年12月廣東廣州市天河區(qū)盈溪幼兒園招聘編外教輔人員1人參考題庫新版
- 2025年下半年黑龍江日報報業(yè)集團招聘部分崗位縮減招聘人數(shù)參考題庫完美版
- 2025年南陽市公安機關(guān)招聘看護隊員體能測試資格確認的參考題庫含答案
- 2025年安康鎮(zhèn)坪縣社區(qū)工作者招聘(6人)備考題庫附答案
- 2025年山東省經(jīng)濟管理干部學院輔導員考試筆試真題匯編附答案
- 植入式靜脈給藥裝置(輸液港)-中華護理學會團體標準2023
- GB/T 2988-2023高鋁磚
- 東風7電路圖解析
- 數(shù)字填圖系統(tǒng)新版(RgMap2.0)操作手冊
- YY/T 1778.1-2021醫(yī)療應用中呼吸氣體通路生物相容性評價第1部分:風險管理過程中的評價與試驗
- FZ/T 73009-2021山羊絨針織品
- JJF 1069-2012 法定計量檢定機構(gòu)考核規(guī)范(培訓講稿)
- 2011-2015廣汽豐田凱美瑞維修手冊wdl
- DFMEA編制作業(yè)指導書新版
- DB35∕T 1844-2019 高速公路邊坡工程監(jiān)測技術(shù)規(guī)程
- 城市管理綜合執(zhí)法局城管執(zhí)法與執(zhí)法程序PPT模板
評論
0/150
提交評論