操作系統(tǒng)-文件系統(tǒng)-課程設(shè)計報告--后附源代碼-副本_第1頁
操作系統(tǒng)-文件系統(tǒng)-課程設(shè)計報告--后附源代碼-副本_第2頁
操作系統(tǒng)-文件系統(tǒng)-課程設(shè)計報告--后附源代碼-副本_第3頁
操作系統(tǒng)-文件系統(tǒng)-課程設(shè)計報告--后附源代碼-副本_第4頁
操作系統(tǒng)-文件系統(tǒng)-課程設(shè)計報告--后附源代碼-副本_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、計算機(jī)操作系統(tǒng)課程設(shè)計報告設(shè)計項目名稱: 文件系統(tǒng)設(shè)計專業(yè):網(wǎng)絡(luò)工程班級:201001學(xué)號:0117 ; 0121姓名: 張世波趙流男指導(dǎo)教師:張瑞紅目錄錯誤! 未定義書簽。 錯誤! 未定義書簽。 錯誤! 未定義書簽。 錯誤! 未定義書簽。 錯誤! 未定義書簽。 錯誤! 未定義書簽。錯誤 ! 未定義書簽。 錯誤! 未定義書簽。46 錯誤! 未定義書簽。1 課程設(shè)計簡介 課程設(shè)計的目的 課程設(shè)計內(nèi)容 2 數(shù)據(jù)結(jié)構(gòu)的設(shè)計 預(yù)定義 結(jié)構(gòu)體 全局變量和函數(shù) 3 功能模塊(或算法)描述 模塊劃分 模塊流程圖 4 程序運(yùn)行結(jié)果 5 心得體會 錯 誤! 未定義書簽參考文獻(xiàn) 錯 誤! 未定義書簽附源代碼 錯誤

2、! 未定義書簽1 課程設(shè)計簡介課程設(shè)計的目的課程設(shè)計目的使學(xué)生熟悉文件管理系統(tǒng)的設(shè)計方法; 加深對所學(xué)各種文件操作的了 解及其操作方法的特點。 通過模擬文件系統(tǒng)的實現(xiàn), 深入理解操作系統(tǒng)中文件系統(tǒng)的理論知 識, 加深對教材中的重要算法的理解。同時通過編程實現(xiàn)這些算法, 更好地掌握操作系統(tǒng)的原理及實現(xiàn)方法 , 提高綜合運(yùn)用各專業(yè)課知識的能力。課程設(shè)計內(nèi)容課程設(shè)計內(nèi)容設(shè)計一個簡單的多用戶文件系統(tǒng)。即 在系統(tǒng)中用一個文件來模擬一個磁盤; 此系統(tǒng)至少有: Create 、 delete 、 open、close 、read 、write 等和部分文件屬性的功能。 實現(xiàn)這個文件系統(tǒng)。能實際演示這個文件系

3、統(tǒng)?;旧鲜沁M(jìn)入一個界面(此界面就是該文件系統(tǒng)的界面)后, 可以實現(xiàn)設(shè)計的操作要求。1)設(shè)計一個 10個用戶的文件系統(tǒng),每次用戶可保存 10 個文件,一次運(yùn)行用戶可以打開 5 個文件。2) 程序采用二級文件目錄(即設(shè)置主目錄 MFD和用戶文件目錄(UFD。另外,為打開文 件設(shè)置了運(yùn)行文件目錄( AFD)。3)為了便于實現(xiàn),對文件的讀寫作了簡化,在執(zhí)行讀寫命令時,只需改讀寫指針,并不進(jìn) 行實際的讀寫操作。4)因系統(tǒng)小,文件目錄的檢索使用了簡單的線性搜索。5) 文件保護(hù)簡單使用了三位保護(hù)碼:允許讀寫執(zhí)行、對應(yīng)位為1,對應(yīng)位為 0,則表示不允 許讀寫、執(zhí)行。6) 程序中使用的主要設(shè)計結(jié)構(gòu)如下:主文件

4、目錄和用戶文件目錄(MFD UFD,打開文件目 錄(AFD即運(yùn)行文件目錄,如圖所示。登錄nBalloc(int k) r申請k個block:J輸入用戶名寸In ode位圖是否加鎖否,加鎖否否宀B1 查找H是否加鎖否,加鎖是否有k個空閑的.才按照分一寸空閑的 block 是,登錄成功2數(shù)據(jù)結(jié)構(gòu)的設(shè)計_ _ 在ionde位圖順序查找空閑的in ode申請失敗找不申請失敗找到返回inode地址#defi ne找到返回Sick地址:_結(jié)束4Block位圖解鎖結(jié)束后在連續(xù)出版物:序號主要責(zé)任者文獻(xiàn)題名Inode位圖解鎖結(jié)束 丿J.刊名,出版年份,卷號(期號):起止頁碼)2?劉國鈞,王連成.圖書館史研究M

5、.北京:高等教育出版社,1979: 15-18,31.(專著:序號主要責(zé)任者文獻(xiàn)題名M 出版地:出版者,出版 年:起止頁碼.)3孫品一.高校學(xué)報編輯工作現(xiàn)代化特征C.中國高等學(xué)校自然科學(xué)學(xué)報 研究會.科技編輯學(xué)論文集(2).北京:北京師范大學(xué)出版社,1998:10-22.(論 文集:序號主要責(zé)任者.文獻(xiàn)題名C /主編.論文集名.出版地:出 版者,出版年:起止頁碼.)附:源代碼/*makefile*/ filsys:cc -o filsyscc -c cc -c cc cc -c cc -c cc -c cc -c cc -c cc -c cc -c cc -c cc -c cc -c cc -

6、c cc -c cc -c cc -c/*/#define BLOCKSIZ 512#define SYSOPENFILE 40#define DIRNUM 128#define DIRSIZ 14#define PWDSIZ 12#define PWDNUM 32#define NOFILE 20#define NADDR 10#define NHINO 128#define USERNUM 10#define DINODESIZ 32/*filesys*/#define DINODEBLK 32#define FILEBLK 512#define NICFREE 50#define NIC

7、INOD 50#define DINODESTART 2*BLOCKSIZ#define DATASTART(2+DINODEBLK)*BLOCKSIZ /*di_mode*/#define DIEMPTY 0000#define DIFILE 01000#define DIDIR 02000#define UDIREAD 00001#define UDIWAITE 00002#define UDIEXICUTE 00004#define GDIREAD 00010#define GDIWRITE 00020#define GDIEXICUTE 00040#define ODIREAD 001

8、00#define ODIWRITE 00200#define ODIEXICUTE 00400#define READ 1#define WRITE2#define EXICUTE 4#define DEFAULTMODE 00777 /*i_flag*/#define IUPDATE 00002 /*s_fmod*/#define SUPDATE 00001/*f_flag*/#define FREAD 00001 #define FWRITE 00002 #define FAPPEND 00004/*error*/#define DISKFULL 65535/*fseek origin*

9、/#define SEEK_SET 0sruct inodestruct inode *i_forw; struct inode*i_back; char i_flag;unsigned int i_ino; unsigned int i_count; unsigned short di_number; unsigned short di_mode; unsigned short di_uid; unsigned short di_gid; unsigned int di_size; unsigned int di_addrNADDR; ;struct dinodeunsigned short

10、 di_number; unsigned short di_mode; unsigned short di_uid; unsigned short di_gid; unsigned long di_size; unsigned int di_addrNADDR; ;struct directunsigned d_nameDIRSIZ; unsigned int d_ino;struct filsysunsigned short s_isize; unsigned long s_fsize;unsigned int s_nfree;unsigned short s_pfree; unsigned

11、 int s_freeNICFREE;unsigned int s_ninode; unsigned short s_pinode;unsigned int s_inodeNICINOD; unsigned int s_finode;char s_fmod;struct pwdunsigned short p_uid;unsigned short p_gid; unsigned passwordPWOSIZ;struct dirstruct direct directDIRNUM;int size;struct hinodestruct inode* i_forw;struct filecha

12、r f_flag;unsigned int f_count;struct inode *f_inode;unsigned long f_off;struct userunsigned short u_default_mode;unsigned short u_uid;unsigned short u_gid; unsigned short u_ofileNOFILE; ;extern struct hinode hinodeNHINO; extern struct dir dir;extern struct file sys_ofileSYSOPENFILE;extern struct fil

13、sys filsys;extern struct pwd pwdPWDNUM;extern struct user userUSERNUM;extern FILE *fd;extern struct inode *cur_path_inode; extern int user_id,file_block;extern struct inode *iget();extern iput();extern unsigned int balloc();extern bfree();extern struct inode *ialloc();extern ifree();extern unsigned

14、int namei();extern unsigned int iname();extern unsigned int access();extern _dir();extern mkdir();extern chdir();extern dirlt();extern unsigned short open();extern create();extern unsigned int read();extern unsigned write();extern int login();extern logout();extern install();extern format();extern c

15、lose();extern halt();#include#include#includestruct hinode hinodeNHINO;struct dir dir;struct file sys_ofileSYSOPENFILE;struct filsys filsys;struct pwd pwdPWDNUM;struct user userPWDNUM;FILE *fd;struct inode* cur_path_inode;int user_id,file_block;main()unsigned short ab_fd1,ab_fd2,ab_fd3,ab_fd4;unsign

16、ed short bhy_fd1; char *buf;printf(nDo you want to format the diskn); if(getchat()=y)printf(Format will erase all context on the you sure?n); getchar();else return;if(getchar()=y)formar();elseretrun;install();_dir();login(2118,abcd);user_id=0;mkdir(a2118);chdir(a2118);ab_fd1=creat(user_id,01777);fil

17、e_block=BLOCKSIZ*6+5;buf=(char*)malloc(BLOCKSIZ*6+5);write(ab_fd1,buf,BLOCKSIZ*6+5);close(user_id,ab_fd1);free(buf);mkdir(subdir);chdir(subdir);ab_fd2=creat(user_id,01777);file_block=BLOCKSIZ*4+20;buf=(char*)malloc(BLOCKSIZ*4+20); write(ab_fd2,buf,BLOCKSIZ*4+20);close(user_id,ab_fd2);free(buf);chdir

18、(.); ab_fd3=creat(user_id,01777); file_block=BLOCKSIZ*3+255;buf=(char*)malloc(BLOCKSIZ*3+255); write(ab_fd3,buf,BLOCKSIZ*3+255);close(user_id,ab_fd3);free(buf);_dir();delete();ab_fd4=creat(user_id,01777); file_block=BLOCKSIZ*8+300;buf=(char*)malloc(BLOCKSIZ*8+300); write(ab_fd4,buf,BLOCKSIZ*8+300);c

19、lose(user_id,ab_fd4);free(buf);_dir(); ab_fd3=open(user_id,FAPPEND); file_block=BLOCKSIZ*3+100;buf=(char*)malloc(BLOCKSIZ*3+100); write(ab_fd3,buf,BLOCKSIZ*3+100);close(user_id,ab_fd3);free(buf);_dir();chdir(.);logout();halt();#include#includeformat()struct inode *inode;struct direct dir_bufBLOCKSIZ

20、/(DIRSIZ+2);struct files;unsigned int block_bufBLOCKSIZ/sizeof(int);char *buf;int i,j;fd=fopen(filesystem,r+w+b);buf=(char*)malloc(DINODEBLK+FILEBLK+2)*BLOCKSIZ*sizeof(char); if(buf=NULL)printf(nfile system file creat failed! n);exit(0);fseek(fd,0,SEEK_SET); fwrite(buf,1,(DINODEBLK+FILEBLK+2)*BLOCKS

21、IZ*sizeof(char),fd);pwd0.p_uid=2116;pwd0.p_gid=03;strcpy(pwd0.password,dddd);pwd1.p_uid=2117;pwd1.p_gid=03;strcpy(pwd1.password,bbbb);pwd2.p_uid=2118;pwd2.p_gid=04;strcpy(pwd2.password,abcd);pwd3.p_uid=2119;pwd3.p_gid=04;strcpy(pwd3.password,cccc);pwd4.p_uid=2220;pwd4.p_gid=05;strcpy(pwd4.password,e

22、eee);inode=iget(1);inode-di_number=1; inode-di_mode=DEFAULTMODE|DIDIR; inode-di_size=3*(DIRSIZ+2);inode-di_addr0=0;strcpy(dir_buf0.d_name,.);dir_buf0.d_ino=1;strcpy(dir_buf1.d_name,.);dir_buf1.d_ino=1;strcpy(dir_buf2.d_name,ect);dir_buf2.d_ino=2; fseek(fd,DATASTART,SEEK_SET); fwrite(dir_buf,1,3*(DIR

23、SIZ+2),fd);iput(inode);inode=iget(2);inode-di_number=1; inode-di_mode=DEFAULTMODE|DIDIR; inode-di_size=3*(DIRSIZ+2);inode-di_addr0=1; strcpy(dir_buf0.d_name,.);dir_buf0.d_ino=1; strcpy(dir_buf1.d_name,.);dir_buf1.d_ino=2; strcpy(dir_buf2.d_name,password);dir_buf2.d_ino=3;fseek(fd,DATASTART+BLOCKSIZ*

24、1,SEEK_SET); fwrite(dir_buf,1,3*(DIRSIZ+2),fd);iput(inode);inode=iget(3); inode-di_number=1; inode-di_mode=DEFAULTMODE|DIDIR; inode-di_size=BLOCKSIZ; inode-di_addr0=2;for(i=5;i,PWDNUM;i+)pwdi.p_uid=0;pwdi.p_gid=0; strcpy(pwdi.password, ) fseek(fd,DATASTART+2*BLOCKSIZ,SEEK_SET); fwrite(pwd,1,BLOCKSIZ

25、,fd);iput(inode);=DINODEBLK;=FILEBLK;=DINODEBLK;=FILEBLK-3;for(i=0;iNICINOD;i+)i=4+i;=0;=NICNOD+4; block_bufNICFREE-1=FILEBLK+1; for(i=0;iiNICFREE-1;i+) for(j=0;j2;i-)NICFREE-1+i-j=i;=NIVFREE-1-j+3;=0;fseek(fd,BLOCKSIZ,SEEK_SET); fwrite(&filsys,1sizeof(filsys),fd); fseek(fd,BLOCKSIZ,SEEK_SET); fread

26、(&,a,sizeof(filsys),fd);#include#include#includeinstall()int i,j;fseek(fd,BLOCKSIZ,SEEK_SET);fread(&filsysk,1,sizeof(struct filsys),fd);for(i=0;iNHINO;i+) hinodei.i_forw=NULL;for(i=0;iSYSOPENFILE;i+) sys_ofilei.f_count=0; sys_ofilei.f_inode=NULL;for(i=0;iUSERNUM;i+)useri.u_uid=0;useri.u_gid=0;for(j=

27、0;jdi_size/(DIRSIZ+2);for(i=0;iDIRNUM;i+) strcpyi.d_name,); i.d_ino=0; for(i=0;idi_addri,SEEK_SET); fread(&BLOCKSIZ/(DIRSIZ+2)*i1,BLOCKSIZ,fd); fseek(fd,DATASTART+BLOCKSIZ*cur_path_inode-di_addri,SEEK_SET);fread(&(BLOCKSIZ)/(DIRSIZ+2)*i,1,cur_path_inode-di_size%BLOCKSIZ,fd); #include#include halt()s

28、truct inode *inode;int i,j;chdir(.);iput(cur_path_inode);for(i=0;iUSERNUM;i+)if(useri.u_uid!=0)for(j=0;jNOFILE;j+)if(useri.u_ofilej!=SYSOPENFILE+1)close(i,j); useri.u_ofilej=SYSOPENFILE+1;fseek(fd,BLOCKSIZ,SEEK_SET);fwrite(&filsys,1,sizeof(struct filsys).fd);fclose(fd);printf(nGOODBYE bye. See you N

29、ext turn off the switchn); exit(0);#include #inclodu struct inode *iget(dinodeid) unsigned int dinodeid;int existed=0,inodeid;long addr;struct inode *temp,*newinode;inodeid=dinodeid%NHINO; if(hinodeinodeid).i_forw=NULL)existed=0;elsetemp=hinodeinodeid.i_forw; while(temp) if(temp-i_ino=inodeid)/*exis

30、ted*/ existed=1; temp-i_count+; return temp;elsetemp=temp-i_forw; addr=DINODESTART+dinodeid*DINODESIZ;newinode=(struct inode*)malloc(sizeof(struct inode)fseek(fd,addr,SEEK_SET); fread(&(newinode-di_number),DINODESIZ,1,fd);newinode-i_forw=hinodeinodeid.i_forw; newinode-i_back=newinodelif(newinode-i_f

31、orw!=NULL) newinode-i_forw-i_back=newinode;hinodeinodeid.i_forw=newinode;newinode-i_count=1; newinode-i_flag=0;newinode-_ino=dinodeid;newinode-di_size=3*(DIRSIZ+2); if(dinodeid=3)newinode-di_size=BLOCKSIZ;return newinode; input(pinode) /*input()*/struct inode *pinode;long addr;unsigned int block_num

32、;int i;if(pinode-i_count1)pinode-i_count-;return;elseif(pinode-di_number!=0)/*write back the inode*/ addr=DINODESTSRT+pinode-i_ino*DINODESIZ; fseek(fd,addr,SEEK_SET);fwrite(&pinode-di_number,DINODESIZ,1,fd);else/*rm the inode & the block of the file in the disk*/ block_num=pinode-disize/BLOCKSIZ; fo

33、r(i=0;idi_addri);ifree(pinode-i_ino);/*free the inode in the memory*/ if(pinode-i_forw=NULL) pinode-i_back-i_forw=NULL;elsepinode-i_forw-i_back=pinode-i_back; pinode-i_back-i_forw=pinode-i_forw;ifree(pinode);#include #include static struct dinode block_bufBLOCKSIZ/DINODESIZ;struct inode *ialloc() st

34、ruct inode *temp_inode;unsigned int cur_di;int i,count ,block_end_flag;if=NICINOD)i=0;count=0;block_end_flag=1;=NICINOD-1;cur_di=;while(countNICINOD)|(countdi_number,1,sizeof(struct dinode),fd); filsys,s_pinode+;J=SUPDATE;return temp_inode;ifree(dinodeid)unsigned dinodeid;+;if=NICINOD)=dinodeid;+;el

35、seig(dinodeidNICINOD=dinodeid;=dinodeid;#include #include static unsigned int block_bufBLOCKSIZ;unsigned int balloc()unsigned int free_block,free_block_num;int i;if=0)printf(nDisk Full1 n);return DISKFULL;free_block=;if=NICFREE-1)fseek(fd,DATASTART+*BLOCKSIZ,SEEK_SET); fread(block_buf,1,BLOCKSIZ,fd)

36、;free_block_num=block_bufNICFREE;for(i=0;ifree_block_num;i+)NICFREE-1-i=block_bufi;=NICFREE-free_block-num;else+;=SUPDATE;return free_block;bfree(block_num)unsigned int block_num;int i;if=0)block_bufNICFREE=NICFREE;for(i=0;iNICFREE;i+)block_bufi=NICFREE-1-i;=NICFREE-1;fseek(fd,BlOCKSIZ,SEEK_SET);fwr

37、ite(block_buf,!,BLOCKSIZ,fd);+;=SUPDATE;#include #include #include unsigned int namei(name)char *name;int i,notfound=1;for(i=0;(i&(notfound);i+)if(!strcmpi.d_name,name)&i.d_ino!=0)return i.d_ino;return 0;unsigned int iname(name)char *name;int i,notfound=1;for(i=0;(iDIRNUM)&(notfound);i+)ifi.d_ino=0)

38、notfound=0;break;if(notfound)printf(nThe current directory is full!n);return 0;elsestrcpyi.;i.d_ino=1;return i;#include #include unsigned int access(user_id,inode,mode) unsigned int user_id;struct inode *inode; unsigned short mode; switch(mode) case READ: if(inode-di_mode & ODIREAD) return 1; if(ino

39、de-di_mode& GDIREAD) &-di_gid) return 1;if(inode-di_mode& UDIREAD) &-di_gid) return 1;return 0;case WRITE: if(inode-di_mode & ODIWRITE) return 1; if(inode-di_mode& GDIWRITE) &-di_gid) return 1;if(inode-di_mode& UDIWRITE) &-di_gid) return 1;return 0;case EXICUTE: if(inode-di_mode & ODIEXICUTE) return

40、 1; if(inode-di_mode& GDIEXICUTE) &-di_gid) return 1;if(inode-di_mode& UDIEXICUTE) &-di_gid) return 1;return 0;case DEFAULTMODE: return 1;default: return 0; (useruser_id.u_gid=inode(useruser_id.u_gid=inode(useruser_id.u_gid=inode(useruser_id.u_gid=inode(useruser_id.u_gid=inode(useruser_id.u_gid=inod

41、e#include #include #include _dir() /*_dir*/unsigned short di_mode;int i,j,k,one;struct inode *temp_inode;printf(nCURRENT DIRECTORY:=%dn,;for(i=0;idi_mode ;if(temp_inode-di_mode & DIFILE)printf(f);elseprintf(d);for(j=0;jdi_mode & DIFILE) printf(%ld,temp_inode-di_size); printf(block chain:); for(k=0;k

42、di_size/BLOCKSIZ+1;k+) printf(%d,temp_inode-di_addrk);printf(n);elseprintf(block chain:%dn,dir,directi.d_ino);iput(temp_inode);mkdir(dirname)/*mkdir*/char *dirname;int dirid,dirpos;struct inode *inode;struct direct bufBLOCKSIZ/(DIRSIZ+2); unsigned int block;dirid = namei(dirname);if(dirid!=0) iode=i

43、get(dirid); if(inode-di_mode & DIDIR) printf(n%s directory already existed! n,dirname);elseprintf(n%s is a file name ,&cant creat a dir the same name n,dirname);iput(inode);return;dirpos=iname(dirname); inode=ialloc();dirid=inode_i_ino;+;strcpy(buf0.d_name,.); buf0.d_ino=dirid;strcpy(buf1.d_name,.);

44、 buf1.d_ino=cur_path_inode_i_ino;buf2.d_ino=0;block=balloc(); fseek(ds,DSTASTART+block*BLOCKSIZ,SEEK_SET);fwrite(buf,1,BLOCKSIZ,fd);inode-di_size=2*(DIRSIZ+2);inode-di_number=1 inode-di_mode=useruser_id.u_default_mode|DIDIR; inode-di_uid=useruser_id.u_uid;=useruser_id.u_gid;inode-di_addr0=block;iput

45、(inode);return;chdir(dirname)/*chdir*/char *dirname;unsigned int dirid;struct inode *inod;unsigned short block:int i,j,low=0,high=0;dirid=namei(dirname);if(dirid=0)printf(n%s does not exist!n,dirname);return;inode +iget(dirid);if(!access(user_id,inode,useruser_id.u_default_mode) printf(nhas not acce

46、ss to the directory %sn,dirname); iput(inode);return;/*pack the current directory*/for(i=0;i;i+)for(j=0;jDIRNUM;j+)ifj.d_ino=0)break;memcpy(&j,&i,DIRSIZ+2);j.d_ino=0;/*write back the current directory*/for(i=0;idi_size/BLOCKSIZ+1;i+) bfree(cur_path_inode-di_addri);for(i=0;idiaddri=block;fseek(fd,DST

47、ASTART+block*BLOCKSIZ,SEEK_SET); fwrite(&0,1,BLOCKSIZ,fd); cur_path_inode-di_size=*(DIRSIZ+2);iput(cur_path_inode);cur_path_inode=inode;=inode-di_size/(IRSIZ+2);/*read the change dir from disk*/j=0;for(i=0;idi_size/BLOCKSIZ+1;i+)fseek(fd,DATASTART+inode-di_addri*BLOCKSIZ,SEEK_SET); fread(&0,1,BLOCKSIZ,fd);j+=BLOCKSIZ/(DIRSIZ+2);return;#include#includecreate(user_id,filename,mode)unsigned int user_id;char * filename;unsigned short mode;unsigned int di_ino,di_ith;struct indoe * indoe;int i,j;di_ino=namei(filename);if(di_ino!=0)

溫馨提示

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

評論

0/150

提交評論