Linux文件系統(tǒng)實(shí)驗(yàn)報(bào)告.doc
《Linux文件系統(tǒng)實(shí)驗(yàn)報(bào)告.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《Linux文件系統(tǒng)實(shí)驗(yàn)報(bào)告.doc(19頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 黃岡師范學(xué)院 提高型實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)課題 文件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) (實(shí)驗(yàn)類(lèi)型:□綜合性 R設(shè)計(jì)性 □應(yīng)用性) 實(shí)驗(yàn)課程 操作系統(tǒng)原理 實(shí)驗(yàn)時(shí)間 2015-2016 第二學(xué)期 學(xué)生姓名 何正發(fā) 專(zhuān)業(yè)班級(jí) 軟件工程1401 學(xué) 號(hào) 2014263040107 一、實(shí)驗(yàn)?zāi)康暮鸵? 成績(jī): 1、熟悉操作系統(tǒng)設(shè)計(jì)的過(guò)程,鞏固操作系統(tǒng)的基本知識(shí),加深對(duì)操作原理、功能及各種不同的存儲(chǔ)管理方法理解與應(yīng)用; 2、學(xué)會(huì)運(yùn)用各種語(yǔ)言、軟件開(kāi)發(fā)新軟件的基本方法; 3、增強(qiáng)實(shí)際應(yīng)用能力和動(dòng)手操作能力。 二、實(shí)驗(yàn)條
2、件 Win7 /Windows 8.1/Linux等操作系統(tǒng),裝有java、C、C++、C#等語(yǔ)言工具的環(huán)境。 三、實(shí)驗(yàn)原理分析 可以選擇最佳適應(yīng)算法,按照從小到大的次序組成空閑區(qū)自由鏈,當(dāng)用戶作業(yè)或進(jìn)程申請(qǐng)一個(gè)空閑區(qū)時(shí),存儲(chǔ)管理 程序從表頭開(kāi)始查找,當(dāng)找到第一個(gè)満足要求的空閑區(qū)時(shí),停止查找。如果該空閑區(qū)大于請(qǐng)求表中的請(qǐng)求長(zhǎng) 度,將減去請(qǐng)求長(zhǎng)度后的剩余空閑區(qū)部分留在可用表中?;厥諘r(shí),從作鏈中刪去要回收的作業(yè)塊,同時(shí)在空 閑鏈中插入該作業(yè)大小的空閑區(qū),并按順序排列 四、實(shí)驗(yàn)方案或步驟 1、應(yīng)用環(huán)境、需求分析 本模擬系統(tǒng)主要針對(duì)文件的管理和操作名主要有:創(chuàng)建用戶
3、、文件、文件夾,讀文件,寫(xiě)文件,執(zhí)行文件,關(guān)閉文件,刪除用戶、文件夾、文件的功能。 創(chuàng)建用戶、文件、文件夾:在對(duì)系統(tǒng)發(fā)出操作命令之前必須先登錄用戶,然而登錄之前必須創(chuàng)建該用戶。在創(chuàng)建完后,可通過(guò)登錄用戶來(lái)創(chuàng)建文件和文件夾。在創(chuàng)建文件時(shí)可設(shè)置文件的屬性和輸入文件的內(nèi)容。 讀文件:讀取任何已創(chuàng)建的只讀或讀寫(xiě)文件的內(nèi)容;如果所要讀的文件不是可讀文件時(shí),系統(tǒng)會(huì)顯示該文件不可讀;如果所讀文件不存在,系統(tǒng)會(huì)顯示文件不存在。 寫(xiě)文件用戶可寫(xiě)或重寫(xiě)讀寫(xiě)文件中的內(nèi)容,并保存文件中的重寫(xiě)內(nèi)容,以供下次讀??;當(dāng)所要寫(xiě)的文件不是可寫(xiě)的文件時(shí),系統(tǒng)會(huì)顯示該文件不可寫(xiě);當(dāng)所要寫(xiě)的文件并不存在時(shí),系統(tǒng)會(huì)顯示該文件不存
4、在。 執(zhí)行文件:登錄用戶后,用戶可執(zhí)行系統(tǒng)中已創(chuàng)建的執(zhí)行文件;當(dāng)該文件不是可執(zhí)行文件時(shí),系統(tǒng)會(huì)顯示該文件不可執(zhí)行;當(dāng)該文件不存在時(shí),系統(tǒng)將會(huì)顯示該文件不存在。 關(guān)閉文件:可通過(guò)選擇關(guān)閉文件的功能選項(xiàng),來(lái)關(guān)閉系統(tǒng)中所有打開(kāi)的文件,如果沒(méi)有文件被打開(kāi),則系統(tǒng)會(huì)顯示沒(méi)有文件打開(kāi)。 刪除用戶、文件、文件夾:用戶可通過(guò)選擇刪除的功能選項(xiàng)來(lái)刪除不想再保存的文件和文件夾,刪除后,用戶會(huì)自動(dòng)注銷(xiāo);當(dāng)選擇刪除用戶的功能選項(xiàng)時(shí),系統(tǒng)會(huì)刪除該用戶,以及該用戶所創(chuàng)建的所有文件和文件夾。 2、概要設(shè)計(jì) 打開(kāi)文件流程圖: 寫(xiě)文件流程圖: 關(guān)閉文件流程圖: 3、
5、詳細(xì)設(shè)計(jì) (1)用戶結(jié)構(gòu):賬號(hào)與密碼結(jié)構(gòu) typedef struct users { char name[8]; char pwd[10]; }users; 本系統(tǒng)有8個(gè)默認(rèn)的用戶名,前面是用戶名,后面為密碼,用戶登陸時(shí)只要輸入正確便可進(jìn)入系統(tǒng),否則提示失敗要求重新輸入。 users usrarray[8] = { "usr1","usr1", "usr2","usr2", "usr3","usr3", "usr4","usr4", "usr5","usr5", "usr6","usr6", "usr7","usr7", "usr8","usr8",
6、 }; (2)數(shù)據(jù)結(jié)構(gòu)說(shuō)明 a)文件結(jié)構(gòu)鏈表 struct fnode { char filename[FILENAME_LENGTH]; int isdir; int isopen; char content[255]; fnode *parent; fnode *child; fnode *prev; fnode *next; }; b)函數(shù)介紹 fnode *initfile(char filename[],int isdir);//初始化文件或目錄 void createroot();//建立系統(tǒng)根目錄 int run();系統(tǒng)運(yùn)行 int fi
7、ndpara(char *topara);對(duì)參數(shù)進(jìn)行處理 bool chklogin(char *users, char *pwd);檢查賬號(hào)與口令 void help();命令列表 int mkdir();建立目錄 int create();建立文件 int read();讀取文件 int write();寫(xiě)入文件 int del();刪除文件 int cd();切換目錄 int dir();文件與目錄列表 4、 代碼清單 #include "stdio.h" #include "iostream.h" #include "string.h" #in
8、clude "iomanip.h" #define FILENAME_LENGTH 10 //文件名稱(chēng)長(zhǎng)度 #define COMMAND_LENGTH 10 //命令行長(zhǎng)度 #define PARA_LENGTH 30 //參數(shù)長(zhǎng)度 //賬號(hào)結(jié)構(gòu) typedef struct users { char name[8]; char pwd[10]; }users; //文件結(jié)構(gòu) struct fnode { char filename[FILENAME_LENGTH]; int isdir; int isopen;
9、 char content[255]; fnode *parent; fnode *child; fnode *prev; fnode *next; }; //賬號(hào) users usrarray[8] = { "usr1","usr1", "usr2","usr2", "usr3","usr3", "usr4","usr4", "usr5","usr5", "usr6","usr6", "usr7","usr7", "usr8","usr8", }; fnode *initfile(char filename[],int i
10、sdir); void createroot(); int run(); int findpara(char *topara); bool chklogin(char *users, char *pwd); void help(); int mkdir(); int create(); int read(); int write(); int del(); int cd(); int dir(); fnode *root,*recent,*temp,*ttemp; char para[PARA_LENGTH],command[COMMAND_
11、LENGTH],temppara[PARA_LENGTH],recentpara[PARA_LENGTH]; //創(chuàng)建文件與目錄結(jié)點(diǎn) fnode* initfile(char filename[],int isdir) { fnode *node=new fnode; strcpy(node->filename,filename); node->isdir=isdir; node->isopen=0; node->parent=NULL; node->child=NULL; node->prev=NULL; node->nex
12、t=NULL; return node; } //創(chuàng)建文件存儲(chǔ)結(jié)點(diǎn) void createroot () { recent=root=initfile("/",1); root->parent=NULL; root->child=NULL; root->prev=root->next=NULL; strcpy(para,"/"); } int mkdir() { temp=initfile(" ",1); cin>>temp->filename; if(recent->child==NULL)
13、{ temp->parent=recent; temp->child=NULL; recent->child=temp; temp->prev=temp->next=NULL; } else { ttemp=recent->child; while(ttemp->next) { ttemp=ttemp->next; if(strcmp(ttemp->filename,temp->filename)==0&&ttemp->isdir==1) { printf("對(duì)不
14、起,目錄已存在!"); return 1; } } ttemp->next=temp; temp->parent=NULL; temp->child=NULL; temp->prev=ttemp; temp->next=NULL; } return 1; } int create() { temp=initfile(" ",0); cin>>temp->filename; gets(temp->content); //cin>>temp->content; if(recen
15、t->child==NULL)
{
temp->parent=recent;
temp->child=NULL;
recent->child=temp;
temp->prev=temp->next=NULL;
cout<<"文件建立成功!"<
16、emp->isdir==0)
{
printf("對(duì)不起,文件已存在!");
return 1;
}
}
ttemp->next=temp;
temp->parent=NULL;
temp->child=NULL;
temp->prev=ttemp;
temp->next=NULL;
cout<<"文件建立成功!"< 17、recent;
if(temp!=root)
{cout<<"
18、
19、name[FILENAME_LENGTH];
cin>>filename;
if(recent->child==NULL)
{
cout<<"文件不存在!"<
20、 {
if(strcmp(temp->next->filename,filename)==0)
{cout< 21、 if(strcmp(recent->child->filename,filename)==0)
{
recent->child->isopen=1;//設(shè)置文件標(biāo)記為打開(kāi)
cin>>recent->child->content;
recent->child->isopen=0;//設(shè)置文件標(biāo)記為關(guān)閉
cout<<"文件寫(xiě)入成功!"< 22、(temp->next->filename,filename)==0)
{
recent->child->isopen=1;//設(shè)置文件標(biāo)記為打開(kāi)
cin>>temp->next->content;
recent->child->isopen=0;//設(shè)置文件標(biāo)記為關(guān)閉
cout<<"文件寫(xiě)入成功!"< 23、
if(strcmp(topara,"..")==0)
{
int i;
while(recent->prev)
recent=recent->prev;
if(recent->parent)
{
recent=recent->parent;
}
i=strlen(para);
while(para[i]!=/ && i>0) i--;
if(i!=0)
para[i]=\0;
else
para[i+1]=\0;
}
else
{
fi 24、ndpara(topara);
}
return 1;
}
int findpara(char *topara)
{
int i=0;
int sign=1;
if(strcmp(topara,"/")==0)
{
recent=root;
strcpy(para,"/");
return 1;
}
temp=recent;
strcpy(temppara,para);
if(topara[0]==/)
{
recent=root->child;
i++;
25、 strcpy(para,"/");
}
else
{
if(recent!=NULL && recent!=root)
strcat(para,"/");
if(recent && recent->child)
{
if(recent->isdir)
recent=recent->child;
else
{
printf("路徑錯(cuò)誤!\n");
return 1;
}
}
}
while(i<=strl 26、en(topara) && recent)
{
int j=0;
if(topara[i]==/ && recent->child)
{
i++;
if(recent->isdir)
recent=recent->child;
else
{printf("路徑錯(cuò)誤\n");
return 0;
}
strcat(para,"/");
}
while(topara[i]!=/ && i<=strlen(topara))
{
rec 27、entpara[j]=topara[i];
i++;j++;
}
recentpara[j]=\0;
while((strcmp(recent->filename,recentpara)!=0 || (recent->isdir!=1)) && recent->next!=NULL)
{
recent=recent->next;
}
if(strcmp(recent->filename,recentpara)==0)
{
if(recent->isdir==0)
{strcpy(para,temp 28、para);
recent=temp;
printf("是文件不是目錄。\n");
return 0;
}
strcat(para,recent->filename);
}
if(strcmp(recent->filename,recentpara)!=0 || recent==NULL)
{
strcpy(para,temppara);
recent=temp;
printf("輸入路徑錯(cuò)誤\n");
return 0;
}
}
return 1;
}
int del() 29、
{
char filename[FILENAME_LENGTH];
cin>>filename;
temp=new fnode;
if(recent->child)
{
temp=recent->child;
while(temp->next && (strcmp(temp->filename,filename)!=0 || temp->isdir!=0))
temp=temp->next;
if(strcmp(temp->filename,filename)!=0)
{
cout<<"不 30、存在該文件!"< 31、>next->parent=temp->parent;
temp->parent->child=temp->next;
}
delete temp;
cout<<"文件已刪除!"< 32、 false;
}
void help(void)
{
cout<<" 命 令 一 覽 "< 33、: 刪除文件。 "< 34、mp(command,"mkdir")==0)
mkdir();
else if(strcmp(command,"dir")==0)
dir();
else if(strcmp(command,"cd")==0)
cd();
else if(strcmp(command,"create")==0)
create();
else if(strcmp(command,"read")==0)
read();
else if(strcmp(command,"write")==0)
write();
else if(strcmp(c 35、ommand,"del")==0)
del();
else if(strcmp(command,"help")==0)
help();
else if(strcmp(command,"logout")==0)
return 0;
else
cout<<"請(qǐng)參考help提供的命令列表!"< 36、****************"< 37、 *"<
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑施工重大危險(xiǎn)源安全管理制度
- 安全培訓(xùn)資料:典型建筑火災(zāi)的防治基本原則與救援技術(shù)
- 企業(yè)雙重預(yù)防體系應(yīng)知應(yīng)會(huì)知識(shí)問(wèn)答
- 8 各種煤礦安全考試試題
- 9 危險(xiǎn)化學(xué)品經(jīng)營(yíng)單位安全生產(chǎn)管理人員模擬考試題庫(kù)試卷附答案
- 加壓過(guò)濾機(jī)司機(jī)技術(shù)操作規(guī)程
- 樹(shù)脂砂混砂工藝知識(shí)總結(jié)
- XXXXX現(xiàn)場(chǎng)安全應(yīng)急處置預(yù)案
- 某公司消防安全檢查制度總結(jié)
- 1 煤礦安全檢查工(中級(jí))職業(yè)技能理論知識(shí)考核試題含答案
- 4.燃?xì)獍踩a(chǎn)企業(yè)主要負(fù)責(zé)人模擬考試題庫(kù)試卷含答案
- 工段(班組)級(jí)安全檢查表
- D 氯化工藝作業(yè)模擬考試題庫(kù)試卷含答案-4
- 建筑起重司索信號(hào)工安全操作要點(diǎn)
- 實(shí)驗(yàn)室計(jì)量常見(jiàn)的30個(gè)問(wèn)問(wèn)答題含解析