版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 專 業(yè):計(jì)算機(jī)信息處理</p><p><b> 【設(shè)計(jì)目的】</b></p><p> 1. 課程設(shè)計(jì)目的是通過一個(gè)簡單多用戶文件系統(tǒng)的設(shè)計(jì),加深理解文件系統(tǒng)的內(nèi)部功能和內(nèi)部實(shí)現(xiàn)。</p><p> 2. 結(jié)合數(shù)據(jù)結(jié)構(gòu)、程序設(shè)計(jì)、計(jì)算機(jī)原理等課程的知識(shí),設(shè)計(jì)一個(gè)二級(jí)文件系統(tǒng),進(jìn)一步理解操作系統(tǒng)。</p&
2、gt;<p> 3. 通過對實(shí)際問題的分析、設(shè)計(jì)、編程實(shí)現(xiàn),提高學(xué)生實(shí)際應(yīng)用、編程的能力</p><p><b> 【設(shè)計(jì)內(nèi)容】</b></p><p> 1、delete 刪除文件</p><p> 2、open 打開文件</p><p> 3、close
3、 關(guān)閉文件</p><p> 4、write 寫文件</p><p><b> 【實(shí)驗(yàn)環(huán)境】</b></p><p> Windows7系統(tǒng) </p><p> Visual studio 2010</p><p><b> 【相關(guān)知識(shí)綜述】</b>
4、;</p><p> 本文件系統(tǒng)采用兩級(jí)目錄,其中第一級(jí)對應(yīng)于用戶賬號(hào),第二級(jí)對應(yīng)于用戶帳號(hào)下的文件。另外,為了簡便文件系統(tǒng)未考慮文件共享,文件系統(tǒng)安全以及管道文件與設(shè)備文件等特殊內(nèi)容。</p><p> 首先應(yīng)確定文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu):主目錄、子目錄及活動(dòng)文件等。主目錄和子目錄都以文件的形式存放于磁盤,這樣便于查找和修改。</p><p> 用戶創(chuàng)建的文件,可
5、以編號(hào)存儲(chǔ)于磁盤上。如:file0,file1,file2…并以編號(hào)作為物理地址,在目錄中進(jìn)行登記。</p><p><b> 【設(shè)計(jì)思路】</b></p><p><b> 1 主要數(shù)據(jù)結(jié)構(gòu)</b></p><p> #define MAXNAME 25 /*the largest length of mfdna
6、me,ufdname,filename*/</p><p> #define MAXCHILD 50 /*the largest child每個(gè)用戶名下最多有50個(gè)文件*/</p><p> #define MAX (MAXCHILD*MAXCHILD) /*the size of fpaddrno*/</p><p> typedef struct /*t
7、he structure of OSFILE定義主文件*/</p><p><b> {</b></p><p> int fpaddr; /*file physical address*/</p><p> int flength; /*file length*/</p
8、><p> int fmode; /*file mode:0-Read Only;1-Write Only;2-Read and Write; 3-Protect;*/</p><p> char fname[MAXNAME]; /*file name*/</p><p><b> } OSFILE;</b></p&
9、gt;<p> typedef struct /*the structure of OSUFD定義用戶文件目錄*/</p><p><b> {</b></p><p> char ufdname[MAXNAME]; /*ufd name*/</p><p> OSFILE ufdfile[MAXCHILD];
10、 /*ufd own file*/</p><p><b> }OSUFD;</b></p><p> typedef struct /*the structure of OSUFD'LOGIN定義登陸*/</p><p><b> {</b></p><p> char uf
11、dname[MAXNAME]; /*ufd name*/</p><p> char ufdpword[8]; /*ufd password*/</p><p> } OSUFD_LOGIN;</p><p> typedef struct /*file open mode定義操作方式*/</p><
12、;p><b> {</b></p><p> int ifopen; /*ifopen:0-close,1-open*/</p><p> int openmode; /*0-read only,1-write only,2-read and write,3-initial*/</p><p> }OSUFD_OPEN
13、MODE;</p><p><b> 2 主要函數(shù)</b></p><p> void LoginF(); /*LOGIN FileSystem*/</p><p> void DirF(); /*Dir FileSystem*/</p><p> void CreateF(); /*Create File
14、*/</p><p> void DeleteF(); /*Delete File*/</p><p> void ModifyFM(); /*Modify FileMode*/</p><p> void OpenF(); /*Open File*/</p><p> void CloseF(); /*Close File*/&
15、lt;/p><p> void ReadF(); /*Read File*/</p><p> void WriteF(); /*Write File*/</p><p> void QuitF(); /*Quit FileSystem*/</p><p> void CdF(); /*Change Dir*/</p>&
16、lt;p> void help();</p><p><b> 【主要程序段】</b></p><p> 1 Delete函數(shù)</p><p> void DeleteF() /*Delete File*/</p><p> { char fname[MAXNAME],str[50],str1[50]
17、;</p><p> int i,k,j;</p><p> int fpaddrno1; </p><p> if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0) /*無法刪除主目錄的文件*/</p><p><b> {</b></p>
18、;<p> printf("\nError.Please convert to ufd dir before delete.\n");</p><p> wgetchar=1;</p><p><b> }</b></p><p> if (strcmp(strupr(dirname),strupr(u
19、sername))!=0) /*無法刪除非自己目錄的文件*/</p><p><b> {</b></p><p> printf("\nError.You can only modify filemode in yourself dir.\n");</p><p> wgetchar=1;</p>&l
20、t;p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> printf("\nPlease input FileName:");</p><p> gets(fname)
21、;//從鍵盤獲取所要?jiǎng)h除的文件名</p><p> ltrim(rtrim(fname));</p><p> i=ExistF(fname);//獲取文件編號(hào)</p><p><b> if (i>=0)</b></p><p><b> {</b></p><p
22、> k=ExistD(username);</p><p> if(ifopen[k][i].ifopen==1)/*文件打開時(shí)無法刪除*/</p><p><b> {</b></p><p> printf("\nError.\'%s\' is in open status. Close it bef
23、ore delete.\n",fname);</p><p> wgetchar=1;</p><p><b> }</b></p><p><b> else</b></p><p><b> { </b></p><p> if
24、(ufd[k]->ufdfile[i].fmode==3)/*被保護(hù)的文件無法刪除*/</p><p><b> {</b></p><p> printf("\nError.\'%s\' is in protect status. Close it before delete.\n",fname);</p>
25、<p> wgetchar=1;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> fpaddrno1=ufd[k]->ufdfile[i].fpaddr;//獲
26、取文件對應(yīng)的物理文件名</p><p> fpaddrno[fpaddrno1]=0;//回收盤塊</p><p> for(j=i;j<fcount[k];j++)</p><p><b> {</b></p><p> ufd[k]->ufdfile[j]=ufd[k]->ufdfi
27、le[j+1];//從被刪除的文件號(hào)開始,數(shù)組值全部前移一個(gè)</p><p><b> }</b></p><p> strcpy(str,"d:\\osfile\\file\\file");</p><p> itoa(fpaddrno1,str1,10);//整數(shù)轉(zhuǎn)化成字符串</p><p>
28、; strcat(str,str1);</p><p> strcat(str,".txt");</p><p> remove(str);//刪除物理文件</p><p> fcount[k]--;//k用戶文件數(shù)量少1</p><p> printf("\n \'%s\'is d
29、eleted successfully.\n",fname);</p><p> wgetchar=1;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p>
30、; else//所要?jiǎng)h除的文件不存在 </p><p><b> {</b></p><p> printf("\nError. \'%s\' dose not exist.\n",fname);</p><p> wgetchar=1;</p><p><b>
31、}</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 2 Open函數(shù)</b></p><p> void OpenF() /*Open File*/</p><p><
32、;b> { </b></p><p> char fname[MAXNAME];</p><p> int i,k,j; </p><p> if (strcmp(strupr(dirname),strupr(username))!=0) /*在自己的目錄里才能打開*/</p><p><b> {<
33、;/b></p><p> printf("\nError.You can only open in yourself dir.\n");</p><p> wgetchar=1;</p><p><b> }</b></p><p><b> else</b>&l
34、t;/p><p><b> { </b></p><p> k=ExistD(username);</p><p> for(j=0;j<fcount[k];j++)</p><p><b> {</b></p><p> printf("%15s&q
35、uot;,ufd[k]->ufdfile[j].fname);</p><p><b> }</b></p><p> printf("\nPlease input FileName:");</p><p> gets(fname);//獲取所要打開的文件名</p><p> ltrim
36、(rtrim(fname));</p><p> i=ExistF(fname);//獲取目錄編號(hào)</p><p><b> if (i>=0)</b></p><p><b> {</b></p><p> if(ifopen[k][i].ifopen==1)//輸入的文件是打開的&
37、lt;/p><p><b> {</b></p><p> printf("\nError.\'%s\' is in open status.\n",fname);</p><p> wgetchar=1;</p><p><b> }</b></p&g
38、t;<p><b> else</b></p><p><b> { </b></p><p> ifopen[k][i].ifopen=1;//修改為打開的</p><p> if(ufd[k]->ufdfile[i].fmode==0)/*根據(jù)文件的模式設(shè)置打開模式*/</p>
39、<p> { ifopen[k][i].openmode=0;}</p><p> else if(ufd[k]->ufdfile[i].fmode==1)</p><p> {ifopen[k][i].openmode=1;}</p><p> else if(ufd[k]->ufdfile[i].fmode==2)</p&g
40、t;<p> {ifopen[k][i].openmode=2;}</p><p> else ifopen[k][i].openmode=3;</p><p> printf("\n\'%s\' is opened successfully\n",fname);</p><p> wgetchar=1;
41、</p><p><b> }</b></p><p><b> }</b></p><p> else//文件不存在</p><p><b> {</b></p><p> printf("\nError. \'%s\
42、39; dose not exist.\n",fname);</p><p> wgetchar=1;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p>&
43、lt;b> 3 Close函數(shù)</b></p><p> void CloseF() /*Close File*/</p><p><b> {</b></p><p> char fname[MAXNAME];</p><p> int i,k,j; </p><p>
44、; if (strcmp(strupr(dirname),strupr(username))!=0) /*不在自己的目錄里沒法進(jìn)行*/</p><p><b> {</b></p><p> printf("\nError.You can only close file in yourself dir.\n");</p><
45、;p> wgetchar=1;</p><p><b> }</b></p><p><b> else</b></p><p><b> { </b></p><p> k=ExistD(username);</p><p> fo
46、r(j=0;j<fcount[k];j++)/*列出已經(jīng)打開的文件*/</p><p><b> {</b></p><p> if(ifopen[k][j].ifopen==1)//如果文件是打開的</p><p> printf("%15s",ufd[k]->ufdfile[j].fname);<
47、/p><p><b> }</b></p><p> printf("\nPlease input FileName:");</p><p> gets(fname);//從鍵盤上讀入所要關(guān)閉的文件</p><p> ltrim(rtrim(fname));</p><p>
48、; i=ExistF(fname);//獲取文件編號(hào)</p><p><b> if (i>=0)</b></p><p><b> {</b></p><p> ifopen[k][i].ifopen=0;/*關(guān)閉文件*/</p><p> printf("\n \
49、9;%s\' closed successfully\n",fname);</p><p> wgetchar=1;</p><p><b> }</b></p><p> else//所要關(guān)閉的文件不存在</p><p><b> {</b></p>&l
50、t;p> printf("\nError. \'%s\' dose not exist.\n",fname);</p><p> wgetchar=1;</p><p><b> }</b></p><p><b> }</b></p><p>&l
51、t;b> }</b></p><p><b> 4 Write函數(shù)</b></p><p> void WriteF() /*Write File*/</p><p><b> {</b></p><p> int i,k,n=0;</p><p>
52、; int length;</p><p> char fname[MAXNAME],values[1000];</p><p> char str[255],str1[255],c;</p><p> if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0) //只能寫自己目錄下的文件</p
53、><p><b> {</b></p><p> printf("\nError.Please convert to ufd dir before write.\n");</p><p> wgetchar=1;</p><p><b> return;</b></p&
54、gt;<p><b> }</b></p><p> printf("\nCaution:Open file first\n");</p><p> printf("Opened File(s) List:\n");</p><p> k=ExistD(dirname);//獲取目錄
55、編號(hào)</p><p> for(i=0;i<fcount[k];i++)/*列出可以寫的文件*/</p><p><b> {</b></p><p> if(ifopen[k][i].ifopen==1)//如果文件是打開的</p><p><b> {</b></p>
56、<p> printf("%15s",ufd[k]->ufdfile[i].fname);</p><p><b> n++;</b></p><p><b> }</b></p><p> if((n%4==0)&&(n!=0)) printf("\
57、n");</p><p><b> }</b></p><p> printf("\n%d files openned.\n",n);</p><p> if (n==0) wgetchar=1;//沒有打開的文件</p><p><b> if(n!=0)</b&g
58、t;</p><p><b> {</b></p><p> printf("\nPlease input FileName:");</p><p> gets(fname);//從鍵盤獲取所要寫的文件</p><p> ltrim(rtrim(fname));</p><
59、p> i=ExistF(fname);//獲取文件編號(hào)</p><p><b> if(i>=0)</b></p><p><b> {</b></p><p> if(ifopen[k][i].ifopen==1)//如果文件是打開的</p><p><b> {&
60、lt;/b></p><p> if((ifopen[k][i].openmode==1) ||(ifopen[k][i].openmode==2))//文件是只寫,或者是可讀可寫的</p><p><b> {</b></p><p> itoa(ufd[k]->ufdfile[i].fpaddr,str,10);//獲取文
61、件對應(yīng)的物理地址</p><p> strcpy(str1,"file");</p><p> strcat(str1,str);</p><p> strcpy(str,"d:\\osfile\\file\\");</p><p> strcat(str,str1);</p>&
62、lt;p> strcat(str,".txt");</p><p> fp_file=fopen(str,"ab");//以二進(jìn)制只寫的形式打開,每次將內(nèi)容添加到文件末尾接著上一次內(nèi)容</p><p> length=WriteF1();</p><p> ufd[k]->ufdfile[i].flengt
63、h=ufd[k]->ufdfile[i].flength+length;//計(jì)算總長度</p><p> printf("\n\n%d Length.\n",ufd[k]->ufdfile[i].flength);</p><p> printf("\n\nYou have write file successfully!!");&l
64、t;/p><p> fclose(fp_file);</p><p> wgetchar=0;</p><p><b> }</b></p><p> else if(ifopen[k][i].openmode==0)//文件是只讀的</p><p><b> {</b>
65、;</p><p> printf("\nError.\'%s\' has been opened with READ ONLY mode. It isn\'t write.\n",fname);</p><p> wgetchar=1;</p><p><b> }</b></p>
66、<p> else//文件是保護(hù)的</p><p><b> {</b></p><p> printf("\nError.\'%s\' has been opened with PROTECT mode. It isn\'t write.\n",fname);</p><p>
67、 wgetchar=1;</p><p><b> }</b></p><p><b> }</b></p><p> else //文件是關(guān)閉的</p><p><b> {</b></p><p> printf("\nError
68、.\'%s\' is in closing status. Please open it before write\n",fname);</p><p> wgetchar=1;</p><p><b> }</b></p><p><b> }</b></p><p&g
69、t; else //所指定的文件不存在</p><p><b> {</b></p><p> printf("\nError. \'%s\' does not exist.\n",fname);</p><p> wgetchar=1;</p><p><b>
70、}</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 【程序流程設(shè)計(jì)】</b></p><p><b> 總的功能結(jié)構(gòu)圖:</b></p><p>
71、部分子模塊程序流程圖</p><p> ?。?)打開命令的程序流程圖:</p><p> (2)關(guān)閉命令的程序流程圖:</p><p> ?。?)寫命令的程序流程圖:</p><p> ?。?)刪除命令的程序流程圖:</p><p><b> 【測試結(jié)果】</b></p><
72、;p><b> 1 刪除文件</b></p><p> 2 打開的文件不能刪除</p><p> 3 打開文件,其中已經(jīng)打開的文件不能再次打開</p><p><b> 3 關(guān)閉文件</b></p><p> 4 寫文件,其中只有打開了文件才能寫入</p><p&
73、gt;<b> 5 寫文件</b></p><p> 6 只讀文件和保護(hù)文件不能寫入</p><p><b> 7 其他函數(shù)</b></p><p><b> 【參考文獻(xiàn)】</b></p><p> 計(jì)算機(jī)操作系統(tǒng),西安電子科技大學(xué)出版社,方敏主編,2004.8<
74、;/p><p> 部分函數(shù)含義引用于msdn.microsoft.com</p><p><b> 【源程序清單】</b></p><p> #include "stdio.h"</p><p> #include "string.h"</p><p>
75、 #include "conio.h"</p><p> #include "stdlib.h"</p><p> #define MAXNAME 25 /*the largest length of mfdname,ufdname,filename*/</p><p> #define MAXCHILD 50 /*
76、the largest child每個(gè)用戶名下最多有50個(gè)文件*/</p><p> #define MAX (MAXCHILD*MAXCHILD) /*the size of fpaddrno*/</p><p> typedef struct /*the structure of OSFILE定義主文件*/</p><p><b> {<
77、/b></p><p> int fpaddr; /*file physical address*/</p><p> int flength; /*file length*/</p><p> int fmode; /*file mode:0-Read Only;1-Write Onl
78、y;2-Read and Write; 3-Protect;*/</p><p> char fname[MAXNAME]; /*file name*/</p><p><b> } OSFILE;</b></p><p> typedef struct /*the structure of OSUFD定義用戶文件目
79、錄*/</p><p><b> {</b></p><p> char ufdname[MAXNAME]; /*ufd name*/</p><p> OSFILE ufdfile[MAXCHILD]; /*ufd own file*/</p><p><b> }OSUFD;</b&g
80、t;</p><p> typedef struct /*the structure of OSUFD'LOGIN定義登陸*/</p><p><b> {</b></p><p> char ufdname[MAXNAME]; /*ufd name*/</p><p> char ufdp
81、word[8]; /*ufd password*/</p><p> } OSUFD_LOGIN;</p><p> typedef struct /*file open mode定義操作方式*/</p><p><b> {</b></p><p> int ifopen;
82、 /*ifopen:0-close,1-open*/</p><p> int openmode; /*0-read only,1-write only,2-read and write,3-protect*/</p><p> }OSUFD_OPENMODE;</p><p> void LoginF(); /*LOGIN FileSystem*/&l
83、t;/p><p> void DirF(); /*Dir FileSystem*/</p><p> void CreateF(); /*Create File*/</p><p> void DeleteF(); /*Delete File*/</p><p> void ModifyFM(); /*Modify FileMode*
84、/</p><p> void OpenF(); /*Open File*/</p><p> void CloseF(); /*Close File*/</p><p> void ReadF(); /*Read File*/</p><p> void WriteF(); /*Write File*/</p>&
85、lt;p> void QuitF(); /*Quit FileSystem*/</p><p> void CdF(); /*Change Dir*/</p><p> void help();</p><p> char *rtrim(char *str); /*remove the trailing blanks.*/</p>&
86、lt;p> char *ltrim(char *str); /*remove the heading blanks.*/</p><p> void InputPW(char *password); /*input password,use '*' replace*/</p><p> int ExistD(char *dirname); /*Whethe
87、r DirName Exist,Exist-i,Not Exist-0*/</p><p> int WriteF1(); /*write file*/</p><p> int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/</p><p> void SetPA
88、No(int RorW); /*Set physical address num*/</p><p> int FindPANo(); /*find out physical address num*/</p><p> int ucount=0; /*the count of mfd's ufds用戶數(shù)*/</p><p> int fcoun
89、t[MAXCHILD]; /*the count of ufd's files子文件數(shù)*/</p><p> int loginsuc=0; /*whether login successfully登陸成功*/</p><p> char username[MAXNAME]; /*record login user's name22用戶名*/</p>
90、<p> char dirname[MAXNAME];/*record current directory使用的用戶目錄*/</p><p> int fpaddrno[MAX]; /*record file physical address num物?理地址號(hào),存放自己所創(chuàng)建的所有文件的地址*/</p><p> int wgetchar; /*whether getc
91、har()*/</p><p> OSUFD *ufd[MAXCHILD]; /*ufd and ufd own files*/</p><p> OSUFD_LOGIN ufd_lp;//用戶登錄結(jié)構(gòu)體類型的變量</p><p> OSUFD_OPENMODE ifopen[MAXCHILD][MAXCHILD]; /*record file open/
92、close*/</p><p> FILE *fp_mfd,*fp_ufd,*fp_file_p,*fp_file;//FILE 是變量類型,實(shí)際上是語言定義的標(biāo)準(zhǔn)數(shù)據(jù)結(jié)構(gòu),用于文件</p><p> void clrscr()/*清屏*/</p><p><b> {</b></p><p> system(&
93、quot;cls");</p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p> int i,choice1;</p><p> char choice[50]; /*choi
94、ce operation:dir,create,delete,open,delete,modify,read,write*/</p><p> int choiceend=1; /*whether choice end*/</p><p> //fopen標(biāo)準(zhǔn)函數(shù),打開文件msd.txt,打開一個(gè)二進(jìn)制文件,只允許讀數(shù)據(jù),送返指針,指向FILE類型對象。</p><
95、;p> if((fp_mfd=fopen("d:\\osfile\\mfd.txt","rb"))==NULL)</p><p><b> {</b></p><p> fp_mfd=fopen("d:\\osfile\\mfd.txt","wb");//打開一個(gè)二進(jìn)制文件,只
96、允許寫數(shù)據(jù)</p><p> fclose(fp_mfd);//關(guān)閉一個(gè)流</p><p><b> }</b></p><p> for(i=0;i<MAX;i++) fpaddrno[i]=0;</p><p> clrscr(); /*clear screen*/</p><p
97、> LoginF(); /*user login*/</p><p> if(loginsuc==1) /*Login Successfully*/</p><p><b> {</b></p><p><b> while (1)</b></p><p><b>
98、{</b></p><p> wgetchar=0;</p><p> if (choiceend==1)</p><p> printf("\n\nd:\\%s>",strupr(dirname));//表示以字符串型輸出</p><p><b> else </b><
99、;/p><p> printf("Bad command or file name.Choose help\nd:\\%s>",strupr(dirname));//strupr-變?yōu)榇髮懽帜?lt;/p><p> gets(choice);</p><p> strcpy(choice,ltrim(rtrim(strlwr(choice))
100、));//strlwr將字符串轉(zhuǎn)換為小寫形式,strcpy(dest,char)復(fù)制</p><p> //ltrim(rtrim())去掉輸入用戶名的頭部和尾部空格</p><p> if (strcmp(choice,"dir")==0) choice1=1;//strcmp相同為0</p><p> else if(strcmp(ch
101、oice,"create")==0) choice1=2;</p><p> else if(strcmp(choice,"delete")==0) choice1=3;</p><p> else if(strcmp(choice,"attrib")==0) choice1=4;</p><p>
102、else if(strcmp(choice,"open")==0) choice1=5;</p><p> else if(strcmp(choice,"close")==0) choice1=6;</p><p> else if(strcmp(choice,"read")==0) choice1=7;</p>
103、<p> else if(strcmp(choice,"write")==0) choice1=8;</p><p> else if(strcmp(choice,"exit")==0) choice1=9;</p><p> else if(strcmp(choice,"cls")==0) choice1=10
104、;</p><p> else if(strcmp(choice,"cd")==0) choice1=11;</p><p> else if(strcmp(choice,"help")==0) choice1=20;</p><p> else choice1=12;</p><p> swi
105、tch(choice1)</p><p><b> {</b></p><p> case 1:DirF();choiceend=1;break;</p><p> case 2:CreateF();choiceend=1;if(!wgetchar) getchar();break;</p><p> case
106、3:DeleteF();choiceend=1;if(!wgetchar)getchar();break;</p><p> case 4:ModifyFM();choiceend=1;if(!wgetchar) getchar();break;</p><p> case 5:OpenF();choiceend=1;if (!wgetchar) getchar();break;<
107、;/p><p> case 6:CloseF();choiceend=1;if (!wgetchar) getchar();break;</p><p> case 7:ReadF();choiceend=1;if (!wgetchar) getchar();break;</p><p> case 8:WriteF();choiceend=1;if (!wget
108、char) getchar();break;</p><p> case 9:printf("\nYou have exited this system.");</p><p> QuitF();exit(0);break;</p><p> case 10:clrscr();choiceend=1;break;</p>&l
109、t;p> case 11:CdF();choiceend=1;break;//更改目錄名稱</p><p> case 20:help();choiceend=1;break;</p><p> default:choiceend=0;</p><p><b> }</b></p><p><b>
110、; }</b></p><p><b> }</b></p><p><b> else </b></p><p> printf("\nAccess denied.");</p><p><b> }</b></p>
111、<p> char *rtrim(char *str) /*remove the trailing blanks.去掉登陸用戶名的尾空格*/</p><p><b> {</b></p><p> int n=strlen(str)-1;</p><p> while(n>=0)</p><p>
112、;<b> {</b></p><p> if(*(str+n)!=' ')</p><p><b> {</b></p><p> *(str+n+1)='\0';</p><p><b> break;</b></p>
113、<p><b> }</b></p><p><b> else n--;</b></p><p><b> }</b></p><p> if (n<0) str[0]='\0';</p><p> return str;</
114、p><p><b> }</b></p><p> char *ltrim(char *str) /*remove the heading blanks.去掉登陸用戶名的頭空格*/</p><p><b> {</b></p><p> strrev(str);//字符的順序顛倒</p&g
115、t;<p> rtrim(str);</p><p> strrev(str);</p><p> return str;</p><p><b> }</b></p><p> void SetPANo(int RorW) /*Set physical address num,0-read,1
116、-write物理地址*/</p><p><b> {</b></p><p><b> int i,j;</b></p><p> if (RorW==0)</p><p><b> {</b></p><p> if((fp_file_p=
117、fopen("d:\\osfile\\file\\file_p.txt","rb"))==NULL)//只讀</p><p><b> {</b></p><p> fp_file_p=fopen("d:\\osfile\\file\\file_p.txt","wb");//只寫<
118、;/p><p> fclose(fp_file_p);</p><p><b> }</b></p><p> fp_file_p=fopen("d:\\osfile\\file\\file_p.txt","rb");//只讀</p><p> //fread讀數(shù)據(jù)(輸入地址,
119、大小,個(gè)數(shù),提供數(shù)據(jù)的文件),sizeof是內(nèi)存空間的大小不是長度</p><p> for(i=0;fread(&j,sizeof(int),1,fp_file_p)!=0;i++)</p><p> fpaddrno[j]=1;</p><p><b> }</b></p><p><b>
120、 else</b></p><p><b> {</b></p><p> fp_file_p=fopen("d:\\osfile\\file\\file_p.txt","wb");//只寫</p><p> for(i=0;i<MAX;i++)</p><p&
121、gt; if (fpaddrno[i]==1)</p><p> fwrite(&i,sizeof(int),1,fp_file_p);//fwrite寫數(shù)據(jù)輸出地址,字節(jié)數(shù),個(gè)數(shù),目標(biāo)文件)</p><p><b> }</b></p><p> fclose(fp_file_p);</p><p>&
122、lt;b> }</b></p><p> void InputPW(char *password) /*input password,use '*' replace*/</p><p><b> {</b></p><p><b> int j;</b></p>&
123、lt;p> for(j=0;j<=7;j++)</p><p><b> {</b></p><p> password[j]=getch();//gerch()返回從鍵盤上讀取到的字符</p><p> if ((int)(password[j])!=13)</p><p><b> {
124、</b></p><p> if((int)(password[j])!=8)</p><p> putchar('*');//輸出一個(gè)字符</p><p><b> else</b></p><p><b> {</b></p><p>
125、<b> if (j>0)</b></p><p><b> {</b></p><p><b> j--;</b></p><p> putchar('\b');putchar(' ');putchar('\b');</p>
126、<p><b> }</b></p><p><b> else j--;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></
127、p><p><b> {</b></p><p> password[j]='\0';</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b>
128、;</p><p> password[j]='\0';</p><p><b> }</b></p><p> int ExistD(char *dirname) /*Whether DirName Exist,Exist-i,Not Exist-(-1)*/</p><p><b>
129、 {</b></p><p><b> int i;</b></p><p> int exist=0;</p><p> for(i=0;i<ucount;i++)</p><p> if (strcmp(strupr(ufd[i]->ufdname),strupr(dirname))
130、==0)</p><p><b> {</b></p><p><b> exist=1;</b></p><p><b> break;</b></p><p><b> }</b></p><p> if (exist
131、) return(i);</p><p> else return(-1);</p><p><b> }</b></p><p> int ExistF(char *filename) /*Whether FileName Exist,Exist-i,Not Exist-(-1)*/</p><p><b
132、> {</b></p><p><b> int i,j;</b></p><p> int exist=0;</p><p> j=ExistD(dirname);</p><p> for(i=0;i<fcount[j];i++)</p><p> if (
133、strcmp(strupr(ufd[j]->ufdfile[i].fname),strupr(filename))==0)</p><p><b> {</b></p><p><b> exist=1;</b></p><p><b> break;</b></p><
134、;p><b> }</b></p><p> if (exist) return(i);</p><p> else return(-1);</p><p><b> }</b></p><p> int FindPANo() /*find out physical address
135、 num*/</p><p><b> {</b></p><p><b> int i;</b></p><p> for(i=0;i<MAX;i++)</p><p> if (fpaddrno[i]==0) </p><p><b> {<
136、;/b></p><p> fpaddrno[i]=1;</p><p><b> break;</b></p><p><b> }</b></p><p> if (i<MAX) return(i);</p><p> else return(-1)
137、;</p><p><b> }</b></p><p> int WriteF1() /*write file*/</p><p><b> {</b></p><p> int length=0;</p><p><b> char c;</b
138、></p><p> printf("Please input text(\'#\' stands for end):\n");</p><p> while((c=getchar())!='#')</p><p><b> {</b></p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計(jì)----二級(jí)文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)二級(jí)文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)--二級(jí)文件系統(tǒng)設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--二級(jí)文件系統(tǒng)(java)
- 操作系統(tǒng)課程設(shè)計(jì)--簡單二級(jí)文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)linux二級(jí)文件系統(tǒng)設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--linux二級(jí)文件系統(tǒng)設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--模擬文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)--樹形目錄文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--多級(jí)文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--多級(jí)文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)---文件系統(tǒng)的模擬
- 操作系統(tǒng)課程設(shè)計(jì)---模擬文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)--為linux系統(tǒng)設(shè)計(jì)一個(gè)簡單的二級(jí)文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)-模擬文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--多級(jí)文件系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--多級(jí)文件系統(tǒng).doc
- 操作系統(tǒng)課程設(shè)計(jì)(文件系統(tǒng)管理)
- 操作系統(tǒng)課程設(shè)計(jì)--簡單文件系統(tǒng)的實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)簡單文件系統(tǒng)的實(shí)現(xiàn)
評(píng)論
0/150
提交評(píng)論