實驗-文件管理(二)_第1頁
實驗-文件管理(二)_第2頁
實驗-文件管理(二)_第3頁
實驗-文件管理(二)_第4頁
實驗-文件管理(二)_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗六:文件系統(tǒng)、目的要求1、用高級語言編寫和調(diào)試一個簡單的文件系統(tǒng),模擬文件管理的工作過程。 從而對各種文件操作命令的實質(zhì)內(nèi)容和執(zhí)行過程有比較深入的了解。2、要求設(shè)計一個n個用戶的文件系統(tǒng),每次用戶可保存m個文件,用戶在一 次運行中只能打開一個文件,對文件必須設(shè)置保護措施,且至少有Create、delete、 open、close、read、write 等命令。例題:設(shè)計一個10個用戶的文件系統(tǒng),每次用戶可保存 10個文件,一次運行 用戶可以打開5個文件。程序采用二級文件目錄(即設(shè)置主目錄MFD)和用戶文件目錄(UED) 另外,為打開文件設(shè)置了運行文件目錄(AFD)。為了便于實現(xiàn),對文件的讀

2、寫作了簡化,在執(zhí)行讀寫命令時,只需改讀 寫指針,并不進行實際的讀寫操作。算法與框圖:a、因系統(tǒng)小,文件目錄的檢索使用了簡單的線性搜索。b、文件保護簡單使用了三位保護碼:允許讀寫執(zhí)行、對應(yīng)位為 1,對應(yīng)位為0,則表示不允許讀寫、執(zhí)行。c、程序中使用的主要設(shè)計結(jié)構(gòu)如下:I、主文件目錄和用戶文件目錄( MFD、UFD)H、打開文件目錄(AFD)(即運行文件目錄)U F D文件名保護碼 文件長度 文件名三、調(diào)度算法的流程圖四、文件管理源程序#include<stdio.h>#include<string.h>#include<malloc.h>#include<

3、;stdlib.h> typedef struct ufd char 10;/* 文件名 */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 10;/*打開文件

4、名 */char procode4;int rwpointer;/* 讀寫指針 */AFD;PRO flag3="100",/* 只讀*/"110",/* 讀寫 */"001"/* 可執(zhí)行 */;UFD *rw_pointer;/* 讀寫指針 */AFD *afd=NULL;MFD 10;int num;/* 當(dāng)前用戶個數(shù)*/void displayallfile() int i;UFD *p;for(i=0;i<num;i+)printf(" 用戶 :%s 目錄如下 !n",i.username);p=i.

5、link;while(p) printf("t 文件名 : %st|",p ->);printf(" 文件屬性 : %st|",p ->procode);printf(" 文件長度 : %dnn",p ->length); p=p->nextfile;void input() /* 建立用戶文件系統(tǒng)*/ int i,j;int length;char 10;char procode4;UFD *p1,*p2,*first;for(i=0;i<10;i+)i.link=NULL;printf("

6、用戶號碼 :n");scanf("%d",&num);for(i=0;i<num;i+)/* 輸入各用戶名稱*/printf("輸入第d個用戶名:n",i+1);scanf("%s",i.username);for(i=0;i<num;i+)/* 輸入某用戶的文件數(shù)據(jù)*/j=1;printf("第個用戶的文件如下n",i+1);printf(" 文件%d:n",j);printf(" 長度:");scanf("%d",&

7、;length);if(!length)continue;printf(" 文件名 :");scanf("%s",);printf("文件屬性(100只讀,110讀寫,001可執(zhí)行)");scanf("%s",procode);first=(UFD*)malloc(sizeof(UFD);first->next;strcpy(first->);strcpy(first->procode,procode);first->length=length;p1=p2=first;j+;while(1)

8、printf(" 文件%d:n",j);printf(" 長度:");scanf("%d",&length);if(!length)break;printf(" 文件名 :");scanf("%s",);printf("屬性(100只讀,110讀寫,001可執(zhí)行):");scanf("%s",procode);p2=(UFD*)malloc(sizeof(UFD);p2->next;strcpy(p2->);strcpy(p2->

9、procode,procode);p2->length=length;j+;p1->next;p1=p1->nextfile; i.link=first; displayallfile();int findusername(char * username)/* 返回用戶名下標(biāo),當(dāng) I=NUM 時, 用戶不存在*/ int i;i=0;while(i<num)if(!strcmp(i.username ,username)break;i+;return i;UFD * find(char * *)UFD *k;k=;while(k&&strcmp(->

10、;)k=k->nextfile;return k;void display *link) UFD *p;p=link;if(!p) printf("n 此目錄沒有該文件! ");return;printf("n 用戶文件如下:n");while(p) printf("%st|",p ->);printf("%st|",p ->procode);printf("%dnn",p ->length);p=p->nextfile;void createfile() char

11、 username10;char 10;int i;UFD *p1,*p2,*newfile;if(num>=10)/*用戶文件目錄已滿,創(chuàng)建文件失敗*/printf(" 用戶文件目錄已滿n 創(chuàng)建文件失敗!n");return;printf(" 輸入用戶名 :n");scanf("%s",username);i=findusername(username);/*返回用戶名下標(biāo) */if(i=num)/* 如果該用戶不存在,且用戶個數(shù)不小于10,先創(chuàng)建用戶再建立用戶文件*/printf(" 用戶不存在,請建立用戶 !n&

12、quot;);strcpy(num.username ,username);/*創(chuàng)建用戶 目錄*/ num+;newfile =(UFD *)malloc(sizeof(UFD);newfile->next;num-1.link=newfile;printf(" 文件名 :");scanf("%s",num-1.link->);printf("n 屬性 :");scanf("%s",num-1.link->procode);printf("n 長度 :");scanf(&quo

13、t;%d",&(num-1.link->length);printf("n 文件已創(chuàng)建!n");else/* 為已存在的用戶建立文件*/p1=p2=i.link ;printf(" 輸入文件名 :");scanf("%s",);while(p2) if (!strcmp(p2->) printf(" 文件名已存在,請輸入新文件名 !n");scanf("%s",); p1=p2;p2=p2->nextfile;newfile=(UFD *)malloc(siz

14、eof(UFD);newfile->next;strcpy(newfile->);printf("n 屬性:");scanf("%s",newfile->procode);printf("n 長度:");scanf("%d",&(newfile->length);p1->nextprintf("n 文件已創(chuàng)建!n");displayallfile();void displayuser()/*顯示用戶目錄*/int i;if(num<=0)return;

15、printf("n 用戶目錄如下! ");for(i=0;i<num;i+);printf("n%s",i.username);void deletefile() /* 刪除文件 */ int i;char username10;char 10;UFD *p1,*p2;printf("n 輸入用戶名 :n");scanf("%s",username);i=findusername(username); 返回用戶 名下標(biāo) if(i>=num)printf(" 用戶不存在!n 刪除失敗 !&quo

16、t;);return ;else printf("n 輸入文件名 :");scanf("%s",);p1=p2=i.link;while(p2&&strcmp(p2->)p1=p2;p2=p2->nextfile;if(!p2)printf("n 文件不存在!n 刪除失敗 !n");else if(p1=p2)i.link=p1 ->nextfile; else p1->next>nextfile;delete(p2);printf(" 文件已刪除!n");displa

17、yallfile();AFD * openfile() char username10;char 10;int i;UFD *p=NULL;AFD *k=NULL;/力打開的文件設(shè)置了運行文件目錄*/printf("輸入用戶名:n");scanf("%s",username);i=findusername(username);/*返回用戶名下標(biāo) */if(i>=num)printf("n 用戶不存在 !n 不能打開文件!n");return NULL;else/* 用戶存在 */printf("n 輸入文件名 :&qu

18、ot;);scanf("%s",);p=find(i.link);if(!p)/* 用戶文件不存在 */printf("n 文件不存在 !n");return NULL;elseafd=(AFD *)malloc(sizeof(AFD);strcpy(afd->->);strcpy(afd->procode,p->procode);afd->rwpointer=0;printf("n 文件已打開!n");rw_pointer=p;/* 為了讀文件保留指針 */printf("t 文件目錄AFD:

19、n");/*打開運行文件目錄AFD*/printf("t 文件名 : %sn",afd->);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 re

20、adfile()/ AFD *p;p=openfile();if(!p)return;if(strcmp(p->procode,"100")&&strcmp(p->procode,"110") printf("n 文件不可讀 !n",p ->);/* 操作 */else printf(" 已讀取文件!n");printf("t 文件名 :%sn",p->);printf("t 屬性 :%sn",p->procode);printf

21、("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")printf("n 該文件不能寫 !n",p ->);return; else p->rwpointer=rand()%k->length;k->length

22、=p->rwpointer ;/* 修改讀書指針寫回文件*/printf("n 已完成寫操作!n");printf("t 文件名 : %sn",k->);printf("t 屬性 : %sn",k->procode);printf("t 長度 : %dn",k->length);closefile();void executefile() AFD *p;p=openfile();if(!p)printf("n 文件不存在!n");return;if(strcmp(p-&g

23、t;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

24、");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 注意:輸入時當(dāng)文件長度為 0 時表示該用戶的文件輸入結(jié)束!n");printf(" -n");void ()/* 文件基本操作*/ char str10;int sort;while(1)printf(" 輸入命令 :

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論