linux下基于內存的虛擬文件系統(tǒng)設計與實現(xiàn)_第1頁
linux下基于內存的虛擬文件系統(tǒng)設計與實現(xiàn)_第2頁
linux下基于內存的虛擬文件系統(tǒng)設計與實現(xiàn)_第3頁
linux下基于內存的虛擬文件系統(tǒng)設計與實現(xiàn)_第4頁
linux下基于內存的虛擬文件系統(tǒng)設計與實現(xiàn)_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、大連理工大學軟件學院 課程設計報告設計名稱: 網(wǎng)絡安全設計與編程 數(shù)據(jù)庫課程設計 設計題目: linux下基于內存的虛擬文件系統(tǒng)設計與實現(xiàn) 學生學號: 專業(yè)班級: 網(wǎng)絡1001班 學生成績: 指導教師: 課題時間: 2013.6.18 至 2013.7.19 摘 要 近幾年來,計算機的cpu、內存和顯卡等主要配件的性能都提升得很快,而與之相對應的磁盤系統(tǒng)性能正越來越嚴重地成為整個電腦系統(tǒng)性能提升的瓶頸。故將一部分內存拿出做虛擬磁盤,并在虛擬磁盤上實施文件管理系統(tǒng),以加快文件的管理速度,并方便用戶進行各種用戶操作。基于內存的文件管理系統(tǒng),顧名思義,就是將一部分內存拿出來當硬盤用,可以極大的提高在

2、其上進行的文件訪問的速度。關鍵詞:虛擬內存磁盤 文件管理系統(tǒng) linux/qt/c+目 錄第一章 課題背景1.1課題實現(xiàn)的背景及意義第二章 項目總體設計2.1基本功能2.2目的和要求 第3章 詳細設計3.1 程序整體框架和主要算法3.2類的設計與聲明3.3程序流程圖第四章 實驗內容 4.1 運行環(huán)境4.2 運行要求4.3 核心代碼第5章 設計結果與分析總結參考文獻第一章 課題背景: 1,需求概述近年來,隨著操作系統(tǒng)內存容量的不斷地增加,然而相當一部分的操作系統(tǒng)內存卻是浪費了。為此出現(xiàn)了虛擬硬盤的概念,希望能借此實現(xiàn)不同情況的磁盤轉儲和合理利用內存。由于操作系統(tǒng)的虛擬內存很大,因此可以利用這些內

3、存開辟一塊空間作為虛擬磁盤。在此虛擬硬盤上,進行模擬windows文件管理系統(tǒng)的對系統(tǒng)之中的真實的文件的管理。我們采用linux/qt 作為我們的開發(fā)環(huán)境,并實現(xiàn)了可視化界面,所有操作無需輸入命令,而是通過點擊按鈕實現(xiàn)相應的功能。2,需求分析2.1需求理解與模塊圖對用戶需求的理解:該模擬文件系統(tǒng)包括四大模塊:磁盤狀態(tài)顯示模塊、存儲模塊、讀取模塊、文件管理模塊。一:磁盤狀態(tài)顯示模塊:通過點擊查看磁盤信息按鈕可以查看磁盤的信息,其中包括顯示磁盤總容量,剩余空間大小以及當中的文件總個數(shù)。通過餅圖圖示,顯示所用空間和剩余空間的比例,幫助用戶方便的了解磁盤空間的使用情況。二:存儲模塊:用戶點擊導入文件按

4、鈕,彈出導入文件對話框,可將指定路徑的文件導入到內存磁盤中。三:讀取模塊:用戶點擊導出文件按鈕,彈出導出文件對話框,可將內存磁盤中的文件導出到指定路徑的真實的物理磁盤上。四:文件管理模塊:對文件進行各種操作,包括查看,備份,重命名,刪除等操作。用戶只需點擊相應的按鈕即可進行操作,無需以命令行的方式輸入命令,方便快捷。 2.2用例分析通過對在上面進行測試的主機的硬件參數(shù)的考察和測試,因為是在虛擬機下ubuntu系統(tǒng)進行代碼編寫和運行的,收集到系統(tǒng)的內存大小只有512m,發(fā)現(xiàn)當為虛擬內存磁盤分配大小為256m的空間時,測試效果比較好。因此,在程序中,我們沒有再允許用戶輸入所要分配的虛擬磁盤的大小,

5、而是在程序初始化的時候就為其分配大小為256m的空間,每個內存塊的大小設定為16k,然后程序初始化。之后用戶可以進行各種模擬真實磁盤的操作,當用戶點擊退出程序按鈕后,內存信息以及一些程序運行的一些參數(shù)都將保存到外部磁盤上,程序退出。第二章 項目總體設計:程序大致劃分為四個模塊:磁盤狀態(tài)顯示模塊、存儲模塊、讀取模塊、文件管理模塊等。磁盤狀態(tài)顯示模塊:顯示磁盤當前的信息,包括磁盤總容量大小,剩余可用空間大小,磁盤中包含的文件個數(shù)。存儲模塊:當用戶導入新文件或者對文件進行備份的時候,其中的數(shù)據(jù)都是要存儲在內存虛擬磁盤中的。該模塊的功能就是把用戶導入或備份的數(shù)據(jù)通過一種合理(保證該文件數(shù)據(jù)不會被破壞掉

6、)的方式分配到內存中。讀取模塊:把內存磁盤中的文件導出到用戶指定路徑的真實物理磁盤上,功能和創(chuàng)建文件類似。文件管理模塊:實現(xiàn)對文件的查看,備份,重命名,刪除等操作,因為我們建立的目錄系統(tǒng)是一級目錄,所以不提供創(chuàng)建文件夾的操作,而關于創(chuàng)建文件的操作實質上和從硬盤上導入文件的操作是一樣的,因此我們把創(chuàng)建文件并入到文件讀取模塊里。2.1基本功能:1. 顯示磁盤信息(總容量,剩余可用空間,文件個數(shù))2. 導入文件(支持把指定路徑的物理磁盤中的文件導入到內存中)3. 導出文件(支持把內存中選定的文件導出到物理磁盤上指定路徑的位置)4. 文件查看、備份、重命名、刪除操作5. 文件搜索6. 關機備份,開機加

7、載2.2目的和要求: 本課程設計的目的是設計一個基于內存的文件管理。以加強對內存系統(tǒng)和文件管理系統(tǒng)和理解,同時也可加深對linux操作系統(tǒng)的了解以及熟悉linux下的各種命令,并對linux下qt可視化編程有進一步了解和掌握。3. 詳細設計3.1 程序整體框架和主要算法在qt自動生成的窗口下通過添加控件并賦予每個控件一個實現(xiàn)方法來實現(xiàn)可視化操作,其中用到的一些算法主要有:1. 文件和內存空間分塊解決外部碎片問題并實現(xiàn)空間的高效利用2. 在block類里定義一個標記用來進行對內存的分配和回收3. 使用一個帶有指向每個文件頭結點的鏈表來定位文件4. 用重寫回的方法實現(xiàn)文件的修改操作3.2類的設計與

8、聲明/內存存儲信息的塊類的聲明class blockpublic: block(int blocknum);/塊的初始化 block(block &temp);/復制構造函數(shù) void writedatain(char data);/往塊里寫數(shù)據(jù) int getblocknum();/獲得當前塊的標識號 bool getisoccupied();/獲得當前塊是否被占用的標識 void setisoccupied(bool flag);/設置當前塊的占用標識 void setblocknum(int i);/設置當前塊的標識號 void setnextblock(int nextblock);/

9、設置當前塊指向的下一塊 int getnextblock();/獲得當前塊指向的下一塊號public: char datablocksize;/數(shù)組用于存放數(shù)據(jù)private: bool isoccupied;/塊是否被占用的標識 int blocknum;/ 塊號 int netxblock;/當前塊指向的下一塊;/目錄類的聲明class dirpublic: dir();/目錄類的構造函數(shù) dir(qstring parentid,qstring fileid,qstring childid);/帶參數(shù)的目錄類的構造函數(shù) qstring getfileid();/獲得文件id qstrin

10、g getparentid();/獲得當前文件目錄的上一級目錄id qstring getchildid();/獲得當前文件目錄的下一級目錄id void setfileid(qstring fileid);/設置文件id void setfirstblock(int firstblock);/設置文件所占塊的第一塊地址 int getfirstblock();/獲得文件所占塊的第一塊 void setparentid(qstring parentid);/設置當前文件目錄的上一級目錄 void setchildid(qstring childid);/設置當前文件目錄的下一級目錄 void

11、setoccupyblocks(int blocks);/設置該文件所占的總塊數(shù) int getoccupyblocks();/獲得文件所占的總塊數(shù)private: qstring parentid;/當前文件目錄的上一級目錄 qstring childid;/當前文件目錄的下一級目錄 qstring fileid;/當前文件目錄的標識 int firstblock;/當前文件數(shù)據(jù)所存放的第一塊 int occupyblocks;/當前文件所占的總塊數(shù);/ 窗口類,里面包含了一個用于存儲文件數(shù)據(jù)的數(shù)組,和一個用于記錄當前文件目錄的數(shù)組,所有有關文件的操作的方法接口都是在這個類中實現(xiàn)的class

12、 widget : public qwidgetq_objectpublic: explicit widget(qwidget *parent = 0);/構造函數(shù) void paintevent(qpaintevent *);/畫圖函數(shù) void paint(qimage &image);/畫圖函數(shù) qstring getfilename(qstring filename);/獲取文件名 void setfilename();/設置當前每個button控件對應的文件號和名字 void setfileiconbutton();/設置每個button控件的圖標 void hidefilename

13、label();/隱藏標識文件名的label圖標 void showfilenamelabel();/顯示標識文件名的label圖標 void hidefileiconbutton();/隱藏標識文件名的button圖標 void showfileiconbutton();/顯示標識文件愛你名的button圖標 void showfileopbutton();/顯示各種文件操作的button控件 void hidefileopbutton();/隱藏各種文件操作的button控件 void clearlabeltext();/清除標識文件名的label 圖標 void hidefileicon

14、ati(int i);/ void savadata();/存儲數(shù)據(jù) widget();private slots: void on_fileinbutton_clicked();/導入文件button控件點擊時執(zhí)行的操作 void on_hinfobutton_clicked();/顯示文件信息button控件點擊時執(zhí)行的操作 void on_enterhbutton_clicked();/進入h盤 void on_exitbutton_clicked();/退出該系統(tǒng) void on_fileoutbutton_clicked();/導出文件/綁定文件的button按鈕點擊時執(zhí)行的操作 v

15、oid on_fileiconbutton1_clicked();/ void on_fileiconbutton2_clicked();/ void on_fileiconbutton3_clicked();/ void on_fileiconbutton4_clicked();/ void on_fileiconbutton5_clicked();/ void on_fileiconbutton6_clicked();/ void on_fileiconbutton7_clicked();/ void on_fileiconbutton8_clicked();/ void on_filei

16、conbutton9_clicked();/對文件進行查看 ,備份,重命名,刪除時執(zhí)行的操作 void on_filemodifybutton_clicked();/ void on_filecopybutton_clicked();/ void on_filedeletebutton_clicked();/ void on_filerenamebutton_clicked();/ void on_surefilerenamebutton_clicked();/ void on_cancelfilerenamebutton_clicked();/所搜文件 和取消搜索文件 void on_sea

17、rchsurebutton_clicked();/ void on_searchcancelbutton_clicked();/private: ui:widget *ui;/ block *memory1024*16;/該程序的用于真是存放數(shù)據(jù)的內存,用char型數(shù)據(jù)來存放數(shù)據(jù) dir *root1024;/目錄類數(shù)據(jù) float totaldmem;/當前內存磁盤的總大小 float freemem;/當前內存磁盤可用大小 int occupyblocknum;/內存數(shù)據(jù)中被占用的塊數(shù) qimage image;/ int filenum;/記錄當前內存磁盤的文件個數(shù) qstring cu

18、rrentpath;/當前目錄路徑 qpixmap *fileimg;/ qstring chosefile;/當前選擇的文件 int clickbuttonid;/public: qstring dialogfilename;/ qstring dialogfilesize;/ qstring dialogfirstblock;/;3.3程序流程圖 1.主程序流程圖2.導入文件流程圖3.導出文件流程圖4.查看、修改文件流程圖5.備份文件流程圖第四章 實驗內容:4.1實驗環(huán)境:操作系統(tǒng):linux 編譯軟件:qt creatorqt creator簡介:qt creator是跨平臺的 qt i

19、de, qt creator 是 qt 被 nokia 收購后推出的一款新的輕量級集成開發(fā)環(huán)境(ide)。此 ide 能夠跨平臺運行,支持的系統(tǒng)包括 linux(32 位及 64 位)、mac os x 以及 windows。根據(jù)官方描述,qt creator 的設計目標是使開發(fā)人員能夠利用 qt 這個應用程序框架更加快速及輕易的完成開發(fā)任務。功能和優(yōu)勢:qtcreator 主要是為了幫助新 qt 用戶更快速入門并運行項目,還可提高有經(jīng)驗的 qt 開發(fā)人員的工作效率。使用強大的 c+ 代碼編輯器可快速編寫代碼;語法標識和代碼完成功能輸入時進行靜態(tài)代碼檢驗以及提示樣式上下文相關的幫助代碼折疊括號

20、匹配和括號選擇模式高級編輯功能 ;使用瀏覽工具管理源代碼;集成了領先的版本控制軟件,包括 git、perforce 和 subversion開放式文件,無須知曉確切的名稱或位置搜索類和文件跨不同位置或文件沿用符號在頭文件和源文件,或在聲明和定義之間切換;為 qt跨平臺開發(fā)人員的需求而量身定制;集成了特定于 qt 的功能,如信號與槽 (signals & slots)圖示調試器, 對 qt 類結構可一目了然集成了 qt designer 可視化布局和格式構建器只需單擊一下就可生成和運行 qt 項目。基于qt的這些優(yōu)點,我們選擇它作為我們在linux下編寫程序的一個平臺。4.2運行要求: 程序是建

21、立在linux/qt環(huán)境下的,要求有一定量的可支配內存空間,以保證程序能正常運行。4.3核心代碼:/block.cpp#include block.h#includeblock:block(int blocknum) this-isoccupied = false; for(int i=0;idatai = 0; this-blocknum = blocknum; this-netxblock = -1;int block:getnextblock() return this-netxblock;void block:setblocknum(int i) this-blocknum = i;b

22、lock:block(block &temp) this-blocknum = temp.blocknum; this-isoccupied = temp.isoccupied; this-netxblock = xblock; this-writedatain(temp.data);void block:setisoccupied(bool flag) this-isoccupied = flag;void block:setnextblock(int nextblock) this-netxblock = nextblock;int block:getblocknum()

23、return blocknum;bool block:getisoccupied() return this-isoccupied;void block:writedatain(char data) strcpy(this-data,data);/dir.cpp#include dir.hdir:dir() this-parentid = h:/; this-childid = -1; this-fileid = -1; this-firstblock = -1; this-occupyblocks = 0;int dir:getfirstblock() return this-firstbl

24、ock;void dir:setparentid(qstring parentid) this-parentid = parentid;void dir:setchildid(qstring childid) this-childid = childid;void dir:setoccupyblocks(int blocks) this-occupyblocks = blocks;int dir:getoccupyblocks() return this-occupyblocks;dir:dir(qstring parentid, qstring fileid, qstring childid

25、) this-parentid = parentid; this-childid = childid; this-fileid = fileid;void dir:setfirstblock(int firstblock) this-firstblock = firstblock;qstring dir:getfileid() return this-fileid;qstring dir:getparentid() return this-parentid;qstring dir:getchildid() return this-childid;void dir:setfileid(qstri

26、ng fileid) this-fileid = fileid;/ / widget.cpp文件,里面包含了所有可視化操作的實現(xiàn)方法#include widget.h#include ui_widget.h#include#include#include#include#include#include#include#includefileinfodialog.h#include#includewidget:widget(qwidget *parent) : qwidget(parent), ui(new ui:widget) qtextcodec:setcodecforlocale(qtex

27、tcodec:codecforname(utf8); qtextcodec:setcodecforcstrings(qtextcodec:codecforname(utf8); qtextcodec:setcodecfortr(qtextcodec:codecforname(utf8); ui-setupui(this); this-currentpath = h:/; ui-label_filename1-settext(); ui-label_filename2-settext(); ui-label_filename3-settext(); ui-label_filename4-sett

28、ext(); ui-label_filename5-settext(); ui-label_filename6-settext(); ui-label_filename7-settext(); ui-label_filename8-settext(); ui-label_filename9-settext(); ui-fileiconbutton1-hide(); ui-fileiconbutton2-hide(); ui-fileiconbutton3-hide(); ui-fileiconbutton4-hide(); ui-fileiconbutton5-hide(); ui-filei

29、conbutton6-hide(); ui-fileiconbutton7-hide(); ui-fileiconbutton8-hide(); ui-fileiconbutton9-hide(); ui-filenametextedit-hide(); ui-filerenamebutton-hide(); ui-surefilerenamebutton-hide(); ui-cancelfilerenamebutton-hide(); this-hidefileopbutton(); this-clickbuttonid = -1; ui-label_searchfile-hide();

30、ui-searchfileedit-hide(); ui-searchsurebutton-hide(); ui-searchcancelbutton-hide(); for(int i = 0;imemoryi = new block(i); for(int i = 0;irooti = new dir(); this-chosefile = ; this-fileimg = new qpixmap(:/icon.jpg); file* fp; fp = fopen(system,rb); char data1024*16; if(fp != null) fread(&this-totald

31、mem,sizeof(float),1,fp); fread(&this-freemem,sizeof(float),1,fp); fread(&this-occupyblocknum,sizeof(int),1,fp); bool isoccupied; int blocknum; int nextblock; for(int i = 0;imemoryi-data,data); this-memoryi-setblocknum(blocknum); this-memoryi-setisoccupied(isoccupied); this-memoryi-setnextblock(nextb

32、lock); qfile dirfileid(dirfileid); dirfileid.open(qiodevice:readonly | qiodevice:text); qtextstream in(&dirfileid); qstring fileid,parentid,childid; fp = fopen(dirintdata,rb); int firstblock; int occupyblocks; this-filenum = 0; for(int i = 0;i fileid; if(fileid != -1) filenum+; inparentid; inchildid

33、; this-rooti-setfileid(fileid); this-rooti-setparentid(parentid); this-rooti-setchildid(childid); fread(&firstblock,sizeof(int),1,fp); fread(&occupyblocks,sizeof(int),1,fp); this-rooti-setfirstblock(firstblock); this-rooti-setoccupyblocks(occupyblocks); else this-filenum = 0; this-totaldmem = 1024*2

34、56; this-freemem = this-totaldmem; this-occupyblocknum = 0; ui-label_filenum-settext(tr(%1).arg(filenum); ui-hinfobutton-hide(); ui-fileinbutton-hide(); ui-fileoutbutton-hide(); image =qimage(800,600,qimage:format_argb32); image.fill(qrgb(255,255,255); paint(image);/存儲數(shù)據(jù)函數(shù),其中保存各個塊以及目錄數(shù)據(jù)中的各項數(shù)據(jù)void wi

35、dget:savadata() file *fp; fp = fopen(system,wb); fwrite(&this-totaldmem,sizeof(float),1,fp); fwrite(&this-freemem,sizeof(float),1,fp); fwrite(&this-occupyblocknum,sizeof(int),1,fp); int blocknum,nextblock; bool isoccupied; for(int i = 0;imemoryi-getblocknum(); isoccupied = this-memoryi-getisoccupied

36、(); nextblock = this-memoryi-getnextblock(); fwrite(&this-memoryi-data,1024*16*sizeof(char),1,fp); fwrite(&blocknum,sizeof(int),1,fp); fwrite(&isoccupied,sizeof(bool),1,fp); fwrite(&nextblock,sizeof(int),1,fp); fp = fopen(dirintdata,wb); qfile dirfileid(dirfileid); if(!dirfileid.open(qiodevice:write

37、only | qiodevice:text) return; qtextstream in(&dirfileid); qstring fileid,parentid,childid; int firstblock,occupyblocks; for(int i = 0; i rooti-getfileid(); parentid = this-rooti-getparentid(); childid = this-rooti-getchildid(); infileidendl; inparentidendl; inchildidrooti-getfirstblock(); occupyblo

38、cks = this-rooti-getoccupyblocks(); fwrite(&firstblock,sizeof(int),1,fp); fwrite(&occupyblocks,sizeof(int),1,fp); /隱藏文件操作按鈕void widget:hidefileopbutton() ui-filemodifybutton-hide(); ui-filecopybutton-hide();/ ui-filemovebutton-hide(); ui-filedeletebutton-hide(); ui-filerenamebutton-hide();/顯示各類文件操作按

39、鈕void widget:showfileopbutton() ui-filemodifybutton-show(); ui-filecopybutton-show();/ ui-filemovebutton-show(); ui-filedeletebutton-show(); ui-filerenamebutton-show();/畫窗體的背景void widget:paint(qimage &image) float freepercent=(this-totaldmem-this-freemem)/this-totaldmem; qpainter painter(&image); pa

40、inter.setbrush(qt:red); painter.setpen(qt:nopen); painter.drawpie(50,100,100,100,0,360*16*freepercent);/*6/10);*/ painter.setbrush(qt:blue); painter.drawpie(50,100,100,100,360*16*freepercent,360*16-360*16*freepercent); painter.setpen(qt:blue); painter.drawtext(60,220,tr(空閑); painter.setpen(qt:red);

41、painter.drawtext(150,120,tr(已用); qstring string; string= tr(%1).arg(this-totaldmem); string = string + kb; ui-totalnum-settext(string); string = tr(%1).arg(this-freemem); string = string + kb; ui-freenum-settext(string);/畫圖函數(shù)void widget:paintevent(qpaintevent *) qpainter paint(this); paint.scale(1,1

42、); paint.drawimage(0,0,this-image);/設置與文件綁定的控件的信息void widget:setfileiconbutton() this-chosefile = ; ui-fileiconbutton1-seticon(qicon(:/icon.jpg); ui-fileiconbutton1-seticonsize(qsize(40,40); ui-fileiconbutton2-seticon(qicon(:/icon.jpg); ui-fileiconbutton2-seticonsize(qsize(40,40); ui-fileiconbutton3

43、-seticon(qicon(:/icon.jpg); ui-fileiconbutton3-seticonsize(qsize(40,40); ui-fileiconbutton4-seticon(qicon(:/icon.jpg); ui-fileiconbutton4-seticonsize(qsize(40,40); ui-fileiconbutton5-seticon(qicon(:/icon.jpg); ui-fileiconbutton5-seticonsize(qsize(40,40); ui-fileiconbutton6-seticon(qicon(:/icon.jpg);

44、 ui-fileiconbutton6-seticonsize(qsize(40,40); ui-fileiconbutton7-seticon(qicon(:/icon.jpg); ui-fileiconbutton7-seticonsize(qsize(40,40); ui-fileiconbutton8-seticon(qicon(:/icon.jpg); ui-fileiconbutton8-seticonsize(qsize(40,40); ui-fileiconbutton9-seticon(qicon(:/icon.jpg); ui-fileiconbutton9-seticon

45、size(qsize(40,40);/點擊與文件綁定的按鈕時執(zhí)行的操作void widget:on_fileiconbutton1_clicked() this-setfileiconbutton(); this-chosefile = ui-label_filename1-text(); ui-fileiconbutton1-seticon(qicon(:/icon2.jpg); ui-fileiconbutton1-seticonsize(qsize(40,40); this-clickbuttonid = 1; this-showfileopbutton();void widget:on_fileiconbutton2_clicked() this-setfileiconbutton(); this-chosefile = ui-label_filename2-text(); ui-fileiconbutton2-seticon(qicon(:/icon2.jpg); ui-fileiconbutton2-seticonsize(qsize(40,40); this-clickbuttonid = 2; this-showfileopbutton();void widget:on_fileiconbutton3_clicked() this-setfil

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論