操作系统文件管理系统模拟实验_第1页
操作系统文件管理系统模拟实验_第2页
操作系统文件管理系统模拟实验_第3页
操作系统文件管理系统模拟实验_第4页
操作系统文件管理系统模拟实验_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

文件管理系统模拟1.实验目的通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现2.实验内容为Linux系统设计一个简单的二级文件系统。要求做到以下几点:(1)可以实现下列几条命令(至少4条)login 用户登录dir 列文件目录create 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件(2)列目录时要列出文件名、物理地址、保护码和文件长度;(3)源文件可以进行读写保护。3.实验提示(1)首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。(2)用户创建的文件,可以编号存储于磁盘上。入file0,file1,file2…并以编号作为物理地址,在目录中进行登记。4.源代码#include<stdio.h>#include<string.h>#include<stdlib.h>#defineMEM_D_SIZE1024*1024//总磁盘空间为1M#defineDISKSIZE1024 //磁盘块的大小1K#defineDISK_NUM1024 //磁盘块数目1K#defineFATSIZEDISK_NUM*sizeof(structfatitem) //FAT表大小#defineROOT_DISK_NOFATSIZE/DISKSIZE+1 //根目录起始盘块号#defineROOT_DISK_SIZEsizeof(structdirect) //根目录大小#defineDIR_MAXSIZE1024 //路径最大长度为1KB#defineMSD5 //最大子目录数5#defineMOFN5 //最大文件深度为5#defineMAX_WRITE1024*128 //最大写入文字长度128KBstructfatitem/*size8*/{ intitem;/*存放文件下一个磁盘的指针*/ charem_disk;/*磁盘块是否空闲标志位0空闲*/};structdirect{ /*-----文件控制快信息-----*/ structFCB { charname[9];/*文件/目录名8位*/ charproperty;/*属性1位目录0位普通文件*/ intsize;/*文件/目录字节数、盘块数)*/ intfirstdisk;/*文件/目录起始盘块号*/ intnext;/*子目录起始盘块号*/ intsign;/*1是根目录0不是根目录*/ }directitem[MSD+2]; };structopentable{ structopenttableitem { charname[9];/*文件名*/ intfirstdisk;/*起始盘块号*/ intsize;/*文件的大小*/ }openitem[MOFN]; intcur_size;/*当前打文件的数目*/};structfatitem*fat;/*FAT表*/structdirect*root;/*根目录*/structdirect*cur_dir;/*当前目录*/structopentableu_opentable;/*文件打开表*/intfd=-1;/*文件打开表的序号*/char*bufferdir;/*记录当前路径的名称*/char*fdisk;/*虚拟磁盘起始地址*/voidinitfile();voidformat();voidenter();voidhalt();intcreate(char*name);intopen(char*name);intclose(char*name);intwrite(intfd,char*buf,intlen);intread(intfd,char*buf);intdel(char*name);intmkdir(char*name);intrmdir(char*name);voiddir();intcd(char*name);voidprint();voidshow();voidinitfile(){ fdisk=(char*)malloc(MEM_D_SIZE*sizeof(char));/*申请1M空间*/ format(); }voidformat(){ inti; FILE*fp; fat=(structfatitem*)(fdisk+DISKSIZE);/*计算FAT表地址,引导区向后偏移1k)*/ /*-----初始化FAT表------------*/ fat[0].item=-1;/*引导块*/ fat[0].em_disk='1'; for(i=1;i<ROOT_DISK_NO-1;i++)/*存放FAT表的磁盘块号*/ { fat[i].item=i+1; fat[i].em_disk='1'; } fat[ROOT_DISK_NO].item=-1;/*存放根目录的磁盘块号*/ fat[ROOT_DISK_NO].em_disk='1'; for(i=ROOT_DISK_NO+1;i<DISK_NUM;i++) { fat[i].item=-1; fat[i].em_disk='0'; } /*-----------------------------------------------*/ root=(structdirect*)(fdisk+DISKSIZE+FATSIZE);/*根目录的地址*/ /*初始化目录*/ /*---------指向当前目录的目录项---------*/ root->directitem[0].sign=1; root->directitem[0].firstdisk=ROOT_DISK_NO; strcpy(root->directitem[0].name,"."); root->directitem[0].next=root->directitem[0].firstdisk; root->directitem[0].property='1'; root->directitem[0].size=ROOT_DISK_SIZE; /*-------指向上一级目录的目录项---------*/ root->directitem[1].sign=1; root->directitem[1].firstdisk=ROOT_DISK_NO; strcpy(root->directitem[1].name,".."); root->directitem[1].next=root->directitem[0].firstdisk; root->directitem[1].property='1'; root->directitem[1].size=ROOT_DISK_SIZE; if((fp=fopen("disk.dat","wb"))==NULL) { printf("Error:\nCannotopenfile\n"); return; } for(i=2;i<MSD+2;i++)/*-子目录初始化为空-*/ { root->directitem[i].sign=0; root->directitem[i].firstdisk=-1; strcpy(root->directitem[i].name,""); root->directitem[i].next=-1; root->directitem[i].property='0'; root->directitem[i].size=0; } if((fp=fopen("disk.dat","wb"))==NULL) { printf("Error:\nCannotopenfile\n"); return; } if(fwrite(fdisk,MEM_D_SIZE,1,fp)!=1)/*把虚拟磁盘空间保存到磁盘文件中*/ { printf("Error:\nFilewriteerror!\n"); } fclose(fp); }voidenter(){ FILE*fp; inti; fdisk=(char*)malloc(MEM_D_SIZE*sizeof(char));/*申请1M空间*/ if((fp=fopen("disk.dat","rb"))==NULL) { printf("Error:\nCannotopenfile\n"); return; } if(!fread(fdisk,MEM_D_SIZE,1,fp))/*把磁盘文件disk.dat读入虚拟磁盘空间(内存)*/ { printf("Error:\nCannotreadfile\n"); exit(0); } fat=(structfatitem*)(fdisk+DISKSIZE);/*找到FAT表地址*/ root=(structdirect*)(fdisk+DISKSIZE+FATSIZE);/*找到根目录地址*/ fclose(fp); /*--------------初始化用户打开表------------------*/ for(i=0;i<MOFN;i++) { strcpy(u_opentable.openitem[i].name,""); u_opentable.openitem[i].firstdisk=-1; u_opentable.openitem[i].size=0; } u_opentable.cur_size=0; cur_dir=root;/*当前目录为根目录*/ bufferdir=(char*)malloc(DIR_MAXSIZE*sizeof(char)); strcpy(bufferdir,"Root:");}voidhalt(){ FILE*fp; inti; if((fp=fopen("disk.dat","wb"))==NULL) { printf("Error:\nCannotopenfile\n"); return; } if(!fwrite(fdisk,MEM_D_SIZE,1,fp))/*把虚拟磁盘空间(内存)内容读入磁盘文件disk.dat*/ { printf("Error:\nFilewriteerror!\n"); } fclose(fp); free(fdisk); free(bufferdir); return;}intcreate(char*name){ inti,j; if(strlen(name)>8)/*文件名大于8位*/ return(-1); for(j=2;j<MSD+2;j++)/*检查创建文件是否与已存在的文件重名*/{ if(!strcmp(cur_dir->directitem[j].name,name)) break;} if(j<MSD+2)/*文件已经存在*/ return(-4); for(i=2;i<MSD+2;i++)/*找到第一个空闲子目录*/{ if(cur_dir->directitem[i].firstdisk==-1) break;}if(i>=MSD+2)/*无空目录项*/ return(-2);if(u_opentable.cur_size>=MOFN)/*打开文件太多*/ return(-3); for(j=ROOT_DISK_NO+1;j<DISK_NUM;j++)/*找到空闲盘块j后退出*/{ if(fat[j].em_disk=='0') break;} if(j>=DISK_NUM) return(-5);fat[j].em_disk='1';/*将空闲块置为已经分配*//*-----------填写目录项-----------------*/strcpy(cur_dir->directitem[i].name,name);cur_dir->directitem[i].firstdisk=j;cur_dir->directitem[i].size=0;cur_dir->directitem[i].next=j;cur_dir->directitem[i].property='0';/*---------------------------------*/fd=open(name);return0; }intopen(char*name){inti,j; for(i=2;i<MSD+2;i++)/*文件是否存在*/{ if(!strcmp(cur_dir->directitem[i].name,name)) break;}if(i>=MSD+2) return(-1); /*--------是文件还是目录-----------------------*/ if(cur_dir->directitem[i].property=='1') return(-4); /*--------文件是否打开-----------------------*/for(j=0;j<MOFN;j++){ if(!strcmp(u_opentable.openitem[j].name,name)) break;} if(j<MOFN)/*文件已经打开*/ return(-2); if(u_opentable.cur_size>=MOFN)/*文件打开太多*/ return(-3); /*--------查找一个空闲用户打开表项-----------------------*/for(j=0;j<MOFN;j++){ if(u_opentable.openitem[j].firstdisk==-1) break;}/*--------------填写表项的相关信息------------------------*/u_opentable.openitem[j].firstdisk=cur_dir->directitem[i].firstdisk;strcpy(u_opentable.openitem[j].name,name);u_opentable.openitem[j].size=cur_dir->directitem[i].size;u_opentable.cur_size++;/*----------返回用户打开表表项的序号--------------------------*/return(j);}intclose(char*name){inti; for(i=0;i<MOFN;i++){ if(!strcmp(u_opentable.openitem[i].name,name)) break;}if(i>=MOFN) return(-1);/*-----------清空该文件的用户打开表项的内容---------------------*/strcpy(u_opentable.openitem[i].name,"");u_opentable.openitem[i].firstdisk=-1;u_opentable.openitem[i].size=0;u_opentable.cur_size--; return0;}intwrite(intfd,char*buf,intlen){ char*first; intitem,i,j,k; intilen1,ilen2,modlen,temp; /*----------用$字符作为空格#字符作为换行符-----------------------*/ charSpace=32; charEndter='\n'; for(i=0;i<len;i++) { if(buf[i]=='$') buf[i]=Space; elseif(buf[i]=='#') buf[i]=Endter; } /*----------读取用户打开表对应表项第一个盘块号-----------------------*/ item=u_opentable.openitem[fd].firstdisk; /*-------------找到当前目录所对应表项的序号-------------------------*/ for(i=2;i<MSD+2;i++) { if(cur_dir->directitem[i].firstdisk==item) break; } temp=i;/*-存放当前目录项的下标-*/ /*------找到的item是该文件的最后一块磁盘块-------------------*/ while(fat[item].item!=-1) { item=fat[item].item;/*-查找该文件的下一盘块--*/ } /*-----计算出该文件的最末地址-------*/ first=fdisk+item*DISKSIZE+u_opentable.openitem[fd].size%DISKSIZE; /*-----如果最后磁盘块剩余的大小大于要写入的文件的大小-------*/ if(DISKSIZE-u_opentable.openitem[fd].size%DISKSIZE>len) { strcpy(first,buf); u_opentable.openitem[fd].size=u_opentable.openitem[fd].size+len; cur_dir->directitem[temp].size=cur_dir->directitem[temp].size+len; } else { for(i=0;i<(DISKSIZE-u_opentable.openitem[fd].size%DISKSIZE);i++) {/*写一部分内容到最后一块磁盘块的剩余空间(字节)*/ first[i]=buf[i]; } /*-----计算分配完最后一块磁盘的剩余空间(字节)还剩下多少字节未存储-------*/ ilen1=len-(DISKSIZE-u_opentable.openitem[fd].size%DISKSIZE); ilen2=ilen1/DISKSIZE; modlen=ilen1%DISKSIZE; if(modlen>0) ilen2=ilen2+1;/*--还需要多少块磁盘块-*/ for(j=0;j<ilen2;j++) { for(i=ROOT_DISK_NO+1;i<DISK_NUM;i++)/*寻找空闲磁盘块*/ { if(fat[i].em_disk=='0') break; } if(i>=DISK_NUM)/*--如果磁盘块已经分配完了-*/ return(-1); first=fdisk+i*DISKSIZE;/*--找到的那块空闲磁盘块的起始地址-*/ if(j==ilen2-1)/*--如果是最后要分配的一块-*/ { for(k=0;k<len-(DISKSIZE-u_opentable.openitem[fd].size%DISKSIZE)-j*DISKSIZE;k++) first[k]=buf[k]; } else/*-如果不是要最后分配的一块--*/ { for(k=0;k<DISKSIZE;k++) first[k]=buf[k]; } fat[item].item=i;/*--找到一块后将它的序号存放在上一块的指针中-*/ fat[i].em_disk='1';/*--置找到的磁盘快的空闲标志位为已分配-*/ fat[i].item=-1;/*--它的指针为-1(即没有下一块)-*/ } /*--修改长度-*/ u_opentable.openitem[fd].size=u_opentable.openitem[fd].size+len; cur_dir->directitem[temp].size=cur_dir->directitem[temp].size+len; } return0;}intread(intfd,char*buf){ intlen=u_opentable.openitem[fd].size; char*first; inti,j,item; intilen1,modlen; item=u_opentable.openitem[fd].firstdisk; ilen1=len/DISKSIZE; modlen=len%DISKSIZE; if(modlen!=0) ilen1=ilen1+1;/*--计算文件所占磁盘的块数-*/ first=fdisk+item*DISKSIZE;/*--计算文件的起始位置-*/ for(i=0;i<ilen1;i++) { if(i==ilen1-1)/*--如果在最后一个磁盘块-*/ { for(j=0;j<len-i*DISKSIZE;j++) buf[i*DISKSIZE+j]=first[j]; } else/*--不在最后一块磁盘块-*/ { for(j=0;j<len-i*DISKSIZE;j++) buf[i*DISKSIZE+j]=first[j]; item=fat[item].item;/*-查找下一盘块-*/ first=fdisk+item*DISKSIZE; } } return0;}intdel(char*name){ inti,cur_item,item,temp; for(i=2;i<MSD+2;i++)/*--查找要删除文件是否在当前目录中-*/ { if(!strcmp(cur_dir->directitem[i].name,name)) break; } cur_item=i;/*--用来保存目录项的序号,供释放目录中-*/ if(i>=MSD+2)/*--如果不在当前目录中-*/ return(-1); if(cur_dir->directitem[cur_item].property!='0')/*--如果删除的(不)是目录-*/ return(-3); for(i=0;i<MOFN;i++)/*--如果文件打开,则不能删除,退出-*/ { if(!strcmp(u_opentable.openitem[i].name,name)) return(-2); } item=cur_dir->directitem[cur_item].firstdisk;/*--该文件的起始盘块号-*/ while(item!=-1)/*--释放空间,将FAT表对应项进行修改-*/ { temp=fat[item].item; fat[item].item=-1; fat[item].em_disk='0'; item=temp; } /*-----------------释放目录项-----------------------*/ cur_dir->directitem[cur_item].sign=0; cur_dir->directitem[cur_item].firstdisk=-1; strcpy(u_opentable.openitem[cur_item].name,"");cur_dir->directitem[cur_item].next=-1;cur_dir->directitem[cur_item].property='0'; cur_dir->directitem[cur_item].size=0; return0;}intmkdir(char*name){ inti,j; structdirect*cur_mkdir; if(!strcmp(name,".")) return(-4); if(!strcmp(name,"..")) return(-4); if(strlen(name)>8)/*-如果目录名长度大于8位-*/ return(-1); for(i=2;i<MSD+2;i++)/*-如果有空闲目录项退出-*/ { if(cur_dir->directitem[i].firstdisk==-1) break; } if(i>=MSD+2)/*-目录/文件已满-*/ return(-2); for(j=2;j<MSD+2;j++)/*-判断是否有重名-*/ { if(!strcmp(cur_dir->directitem[j].name,name)) break; } if(j<MSD+2)/*-如果有重名-*/ return(-3); for(j=ROOT_DISK_NO+1;j<DISK_NUM;j++)/*-找到空闲磁盘块j后退出-*/ { if(fat[j].em_disk=='0') break; } if(j>=DISK_NUM) return(-5); fat[j].em_disk='1';/*-将该空闲块设置为已分配-*/ /*-------------填写目录项----------*/ strcpy(cur_dir->directitem[i].name,name); cur_dir->directitem[i].firstdisk=j; cur_dir->directitem[i].size=ROOT_DISK_SIZE; cur_dir->directitem[i].next=j; cur_dir->directitem[i].property='1'; /*-所创目录在虚拟磁盘上的地址(内存物理地址)-*/ cur_mkdir=(structdirect*)(fdisk+cur_dir->directitem[i].firstdisk*DISKSIZE); /*-初始化目录-*/ /*-指向当前目录的目录项-*/ cur_mkdir->directitem[0].sign=0; cur_mkdir->directitem[0].firstdisk=cur_dir->directitem[i].firstdisk; strcpy(cur_mkdir->directitem[0].name,"."); cur_mkdir->directitem[0].next=cur_mkdir->directitem[0].firstdisk; cur_mkdir->directitem[0].property='1'; cur_mkdir->directitem[0].size=ROOT_DISK_SIZE; /*-指向上一级目录的目录项-*/ cur_mkdir->directitem[1].sign=cur_dir->directitem[0].sign; cur_mkdir->directitem[1].firstdisk=cur_dir->directitem[0].firstdisk; strcpy(cur_mkdir->directitem[1].name,".."); cur_mkdir->directitem[1].next=cur_mkdir->directitem[1].firstdisk; cur_mkdir->directitem[1].property='1'; cur_mkdir->directitem[1].size=ROOT_DISK_SIZE; for(i=2;i<MSD+2;i++)/*-子目录都初始化为空-*/ { cur_mkdir->directitem[i].sign=0; cur_mkdir->directitem[i].firstdisk=-1; strcpy(cur_mkdir->directitem[i].name,""); cur_mkdir->directitem[i].next=-1; cur_mkdir->directitem[i].property='0'; cur_mkdir->directitem[i].size=0; } return0;}intrmdir(char*name){ inti,j,item; structdirect*temp_dir; /*-检查当前目录项中有无该目录-*/ for(i=2;i<MSD+2;i++) { if(!strcmp(cur_dir->directitem[i].name,name)) break; } if(i>=MSD+2)/*-没有这个文件或目录-*/ return(-1); if(cur_dir->directitem[i].property!='1')/*-删除的不是目录-*/ return(-3); /*-判断要删除的目录有无子目录-*/ temp_dir=(structdirect*)(fdisk+cur_dir->directitem[i].next*DISKSIZE); for(j=2;j<MSD+2;j++) { if(temp_dir->directitem[j].next!=-1) break; } if(j<MSD+2)/*-有子目录或文件-*/ return(-2); /*------------找到起始盘块号,并将其释放----------------*/ item=cur_dir->directitem[i].firstdisk; fat[item].em_disk='0'; /*-修改目录项-*/ cur_dir->directitem[i].sign=0; cur_dir->directitem[i].firstdisk=-1; strcpy(cur_dir->directitem[i].name,""); cur_dir->directitem[i].next=-1; cur_dir->directitem[i].property='0'; cur_dir->directitem[i].size=0; return0;}voiddir(){ inti; for(i=2;i<MSD+2;i++) { if(cur_dir->directitem[i].firstdisk!=-1)/*-如果存在子目录-*/ { printf("%s\t",cur_dir->directitem[i].name); if(cur_dir->directitem[i].property=='0')/*-文件-*/ printf("%d\t\t\n",cur_dir->directitem[i].size); else printf("\t<目录>\t\n"); } }}intcd(char*name){ inti,j,item; char*str; char*temp,*point,*point1; structdirect*temp_dir; temp_dir=cur_dir; str=name; if(!strcmp("\\",name)) { cur_dir=root; strcpy(bufferdir,"Root:"); return0; } temp=(char*)malloc(DIR_MAXSIZE*sizeof(char));/*-最长路径名字分配空间-*/ for(i=0;i<(int)strlen(str);i++) temp[i]=str[i]; temp[i]='\0'; for(j=0;j<MSD+2;j++)/*-查找该子目录是否在当前目录中-*/ { if(!strcmp(temp_dir->directitem[j].name,temp)) break; } free(temp);/*释放申请的临时空间*/ //if(temp_dir->directitem[j].property!='1')/*-打开的不是目录-*/ //return(-2); if(j>=MSD+2)/*-不在当前目录-*/ return(-1); item=temp_dir->directitem[j].firstdisk; /*-当前目录在磁盘中位置-*/ temp_dir=(structdirect*)(fdisk+item*DISKSIZE); if(!strcmp("..",name)) { if(cur_dir->directitem[j-1].sign!=1)/*-如果上级目录不是根目录-*/ { point=strchr(bufferdir,'\\');//查找字符串bufferdir中首次出现字符\的位置 while(point!=NULL) { point1=point+1;/*-减去'\'所占的空间,记录下次查找的起始地址-*/ point=strchr(point1,'\\'); } *(point1-1)='\0';/*-将上一级目录删除-*/ } } else { //if(name[0]!='\\') bufferdir=strcat(bufferdir,"\\");/*-修改当前目录-*/ bufferdir=strcat(bufferdir,name); } cur_dir=temp_dir;/*-将当前目录确定下来-*/ return0;}voidshow(){ printf("%s>",bufferdir);}voidprint(){ printf("*********************************************************\n"); printf("**********************文件系统设计***********************\n"); printf("*\t命令格式 说明 *\n"); printf("*\tcd目录名 更改当前目录 *\n"); printf("*\tmkdir目录名 创建子目录 *\n"); printf("*\trmdir目录名 删除子目录 *\n"); printf("*\tdir 显示当前目录的子目录 *\n"); printf("*\tcreate文件名 创建文件 *\n"); printf("*\tdel文件名 删除文件 *\n"); printf("*\topen文件名 打开文件 *\n"); printf("*\tclose文件名 关闭文件 *\n"); printf("*\tread 读文件 *\n"); printf("*\twrite 写文件 *\n"); printf("*\texit 退出系统 *\n"); printf("*********************************************************\n"); }voidmain(){ FILE*fp; charch; chara[100]; charcode[11][10]; charname[10]; inti,flag,r_size; char*contect; contect=(char*)malloc(MAX_WRITE*sizeof(char)); if((fp=fopen("disk.dat","rb"))==NULL) { printf("Youhavenotformat,Doyouwantformat?(y/n)"); scanf("%c",&ch); if(ch=='y') { initfile(); printf("Successfullyformat!\n"); } else { return; } } enter(); print(); show(); strcpy(code[0],"exit"); strcpy(code[1],"create"); strcpy(code[2],"open"); strcpy(code[3],"close"); strcpy(code[4],"write"); strcpy(code[5],"read"); strcpy(code[6],"del"); strcpy(code[7],"mkdir"); strcpy(code[8],"rmdir"); strcpy(code[9],"dir"); strcpy(code[10],"cd"); while(1) { scanf("%s",a); for(i=0;i<11;i++) { if(!strcmp(code[i],a)) break; } switch(i) { case0://退出文件系统 free(contect); halt(); return; case1://创建文件 scanf("%s",name); flag=create(name); if(flag==-1) { printf("Error:\nThelengthistoolong!\n"); } elseif(flag==-2) { printf("Error:\nThedirectitemisalreadyfull!\n"); } elseif(flag==-3) { printf("Error:\nThenumberofopenfileistoomuch!\n"); } elseif(flag==-4) { printf("Error:\nThenameisalreadyinthedirect!\n"); } elseif(flag==-5) { printf("Error:\nThediskspaceisfull!\n"); } else { printf("Successfullycreateafile!\n"); } show(); break; case2://打开文件 scanf("%s",name); fd=open(name); if(fd==-1) { printf("Error:\nTheopenfilenotexit!\n"); } elseif(fd==-2) { printf("Error:\nThefilehavealreadyopened!\n"); } elseif(fd==-3) { printf("Error:\nThenumberofopenfileistoomuch!\n"); } elseif(fd==-4) { printf("Error:\nItisadirect,cannotopenforreadorwrite!\n"); } else { printf("Successfullyopened!\n"); } show(); break; case3://关闭文件 scanf("%s",name); flag=close(name); if(flag==-1) { printf("Error:\nThefileisnotopened!\n"); } else { printf("Successfullyclosed!\n"); } show(); break; case4://写文件 if(fd==-1) { printf("Error:\nThefileisnotopened!\n"); } else { printf("Pleaseinputthefilecontect:"); scanf("%s",contect); flag=write(fd,contect,strlen(contect)); if(flag==0) { printf("Successfullywrite!\n"); } else { printf("Error:\nThedisksizeisnotenough!\n"); } } show(); break; case5://读文件 if(fd==-1) { printf("Error:\nThefileisnotopened!\n"); } else { flag=read(fd,contect); if(flag==0) { for(i=0;i<u_opentable.openitem[fd].size;i++) { printf("%c",contect[i]); } printf("\t\n"); } } show(); break; case6://删除文件 scanf("%s",name); flag=del(name); if(flag==-1) { printf("Error:\nThefilenotexit!\n"); } elseif(flag==-2) { printf("Error:\nThefileisopened,pleasefirstcloseit!\n"); } elseif(flag==-3) { printf("Error:\nThedeleteisnotfile!\n"); } else { printf("Successfullydelete!\n"); } show(); break; case7://创建子目录 scanf("%s",name); flag=mkdir(name); if(flag==-1) { printf("Error:\nThelengthofnameistolong!\n"); } elseif(flag==-2) { printf("Error:\nThedirectitemisalreadyfull!\n"); } elseif(flag==-3) { printf("Error:\nThenameisalreadyinthedirect!\n"); } elseif(flag==-4) { printf("Error:\n'..'or'.'cannotasthenameofthedirect!\n"); } elseif(flag==-5) { printf("Error:\nThediskspaceisfull!\n"); } elseif(flag==0) { printf("Successfullymakedircet!\n"); } show(); break; case8://删除子目录 scanf("%s",name); flag=rmdir(name); if(flag==-1) { printf("Error:\nThedirectisnotexist!\n"); } elseif(flag==-2) { printf("Error:\nThedirecthassondirect,pleasefirstremovethesondircct!\n"); } elseif(flag==-3) { printf("Error:\nTheremoveisnotdirect!\n"); } elseif(flag==0) { printf("Successfullyremovedircet!\n"); } show(); break; case9://显示当前子目录 dir(); show(); break; case10://更改当前目录 scanf("%s",name); flag=cd(name); if(flag==-1) { printf("Error:\nThepathnocorrect!\n"); } elseif(flag==-2) { printf("Error:\nTheopenedisnotdirect!\n"); } show(); break; default: printf("\nError!\nThecommandiswrong!\n"); show(); }}}通过这一次计算机操作系统的上机实验,使我对不同环境下的操作系统有了进一步的了解,使我学到了很多关于Linux的操作和相关知识。原文已完。下文为附加文档,如不需要,下载后可以编辑删除,谢谢!施工组织设计本施工组织设计是本着“一流的质量、一流的工期、科学管理”来进行编制的。编制时,我公司技术发展部、质检科以及项目部经过精心研究、合理组织、充分利用先进工艺,特制定本施工组织设计。工程概况:西夏建材城生活区27#、30#住宅楼位于银川市新市区,橡胶厂对面。本工程由宁夏燕宝房地产开发开发,银川市规划建筑设计院设计。本工程耐火等级二级,屋面防水等级三级,地震防烈度为8度,设计使用年限50年。本工程建筑面积:27#m2;30#m2。室内地坪±m为准,总长27#m;30#m。总宽27#m;30#m。设计室外地坪至檐口高度18.600m,呈长方形布置,东西向,三个单元。本工程设计屋面为坡屋面防水采用防水涂料。外墙水泥砂浆抹面,外刷浅灰色墙漆。内墙面除卫生间200×300瓷砖,高到顶外,其余均水泥砂桨罩面,刮二遍腻子;楼梯间内墙采用50厚胶粉聚苯颗粒保温。地面除卫生间200×200防滑地砖,楼梯间50厚细石砼1:1水泥砂浆压光外,其余均采用50厚豆石砼毛地面。楼梯间单元门采用楼宇对讲门,卧室门、卫生间门采用木门,进户门采用保温防盗门。本工程窗均采用塑钢单框双玻窗,开启窗均加纱扇。本工程设计为节能型住宅,外墙均贴保温板。本工程设计为砖混结构,共六层。基础采用C30钢筋砼条形基础,上砌MU30毛石基础,砂浆采用M10水泥砂浆。一、二、三、四层墙体采用M10混合砂浆砌筑MU15多孔砖;五层以上采用M混合砂浆砌筑MU15多孔砖。本工程结构中使用主要材料:钢材:=1\*ROMANI级钢,=2\*ROMANII级钢;砼:基础垫层C10,基础底板、地圈梁、基础构造柱均采用C30,其余均C20。本工程设计给水管采用PPR塑料管,热熔连接;排水管采用UPVC硬聚氯乙烯管,粘接;给水管道安装除立管及安装IC卡水表的管段明设计外,其余均暗设。本工程设计采暖为钢制高频焊翅片管散热器。本工程设计照明电源采用BV-铜芯线,插座电源等采用BV-4铜芯线;除客厅为吸顶灯外,其余均采用座灯。施工部署及进度计划1、工期安排本工程合同计划开工日期:2004年8月21日,竣工日期:2005年7月10日,合同工期315天。计划2004年9月15日前完成基础工程,2004年12月30日完成主体结构工程,2005年6月20日完成装修工种,安装工程穿插进行,于2005年7月1日前完成。具体进度计划详见附图-1(施工进度计划)。2、施工顺序=1\*GB2⑴基础工程工程定位线(验线)→挖坑→钎探(验坑)→砂砾垫层的施工→基础砼垫层→刷环保沥青→基础放线(预检)→砼条形基础→刷环保沥青→毛石基础的砌筑→构造柱砼→地圈梁→地沟→回填工。=2\*GB2⑵结构工程结构定位放线(预检)→构造柱钢筋绑扎、定位(隐检)→砖墙砌筑(+50cm线找平、预检)→柱梁、顶板支模(预检)→梁板钢筋绑扎(隐检、开盘申请)→砼浇筑→下一层结构定位放线→重复上述施工工序直至顶。=3\*GB2⑶内装修工程门窗框安装→室内墙面抹灰→楼地面→门窗安装、油漆→五金安装、内部清理→通水通电、竣工。=4\*GB2⑷外装修工程外装修工程遵循先上后下原则,屋面工程(包括烟道、透气孔、压顶、找平层)结束后,进行大面积装饰,塑钢门窗在装修中逐步插入。施工准备现场道路本工程北靠北京西路,南临规划道路,交通较为方便。场内道路采用级配砂石铺垫,压路机压。机械准备=1\*GB2⑴设2台搅拌机,2台水泵。=2\*GB2⑵现场设钢筋切断机1台,调直机1台,电焊机2台,1台对焊机。=3\*GB2⑶现场设木工锯,木工刨各1台。=4\*GB2⑷回填期间设打夯机2台。=5\*GB2⑸现场设塔吊2台。3、施工用电施工用电已由建设单位引入现场;根据工程特点,设总配电箱1个,塔吊、搅抖站、搅拌机、切断机、调直机、对焊机、木工棚、楼层用电、生活区各配置配电箱1个;电源均采用三相五线制;各分支均采用钢管埋地;各种机械均设置接零、接地保护。具体配电箱位置详见总施工平面图。施工用水施工用水采用深井水自来水,并砌筑一蓄水池进行蓄水。楼层用水采用钢管焊接给水管,每层留一出水口;给水管不置蓄水池内,由潜水泵进行送水。生活用水生活用水采用自来水。劳动力安排=1\*GB2⑴结构期间:瓦工40人;钢筋工15人;木工15人;放线工2人;材料1人;机工4人;电工2人;水暖工2人;架子工8人;电焊工2人;壮工20人。=2\*GB2⑵装修期间抹灰工60人;木工4人;油工8人;电工6人;水暖工10人。四、主要施工方法1、施工测量放线=1\*GB2⑴施工测量基本要求A、西夏建材城生活区17#、30#住宅楼定位依据:西夏建材城生活区工程总体规划图,北京路、规划道路永久性定位B、根据工程特点及<建筑工程施工测量规程>DBI01-21-95,4、3、2条,此工程设置精度等级为二级,测角中误差±12,边长相对误差1/15000。C、根据施工组织设计中进度控制测量工作进度,明确对工程服务,对工程进度负责的工作目的。=2\*GB2⑵工程定位A、根据工程特点,平面布置和定位原则,设置一横一纵两条主控线即27#楼:(A)轴线和(1)轴线;30#楼:(A)轴线和(1)轴线。根据主轴线设置两条次轴线即27#楼:(H)轴线和(27)轴线;30#楼:(H)轴线和(27)轴线。B、主、次控轴线定位时均布置引桩,引桩采用木桩,后砌一水泥砂浆砖墩;并将轴线标注在四周永久性建筑物或构造物上,施测完成后报建设单位、监理单位确认后另以妥善保护。C、控轴线沿结构逐层弹在墙上,用以控制楼层定位。D、水准点:建设单位给定准点,建筑物±.500m。=3\*GB2⑶基础测量A、在开挖前,基坑根据平面布置,轴线控制桩为基准定出基坑长、宽度,作为拉小线的依据;根据结构要求,条基外侧1100mm为砂砾垫层边,考虑放坡,撒上白灰线,进行开挖。B、在垫层上进行基础定位放线前,以建筑物平面控制线为准,校测建筑物轴线控制桩无误后,再用经纬仪以正倒镜挑直法直接投测各轴线。C、标高由水准点引测至坑底。=4\*GB2⑷结构施工测量A、首层放线验收后,主控轴一引至外墙立面上,作为以上务层主轴线竖身高以测的基准。B、施工层放线时,应在结构平面上校投测轴线,闭合后再测设细部尺寸和边线。C、标高竖向传递设置3个标高点,以其平均点引测水平线折平时,尽量将水准仪安置在测点范围内中心位置,进行测设。2、基坑开挖本工种设计地基换工,夯填砂砾垫层1100mm;根据此特点,采用机械大开挖,留200mm厚进行挖工、铲平。开挖时,根据现场实际土质,按规范要求1:0.33放坡,反铲挖掘机挖土。开挖出的土,根据现场实际情况,尽量留足需用的好土,多余土方挖出,避免二次搬运。人工开挖时,由技术员抄平好水平控制小木桩,用方铲铲平。挖掘机挖土应该从上而下施工,禁止采用挖空底脚的操作方法。机械挖土,先发出信号,挖土的时候,挖掘机操作范围内,不许进行其他工作,装土的时候,任何人都不能停留在装土车上。3、砌筑工程=1\*GB2⑴材料砖:MU15多孔砖,毛石基础采用MU30毛石。砂浆:±0.00以下采用M10水泥砂浆,一、二、三、四层采用M10混合砂浆,五层以上采用M7.5混合砂浆。=2\*GB2⑵砌筑要求A、开工前由工长对所管辖班组下发技术交底。B、砌筑前应提前浇水湿润砖块,水率保持在10%-15%。C、砌筑采用满铺满挤“三一砌筑法“,要求灰浆饱满,灰缝8-12mm。D、外墙转角处应同时砌筑,内外墙交接处必须留斜槎,槎子长度不小于墙体高度的2/3,槎子必须平直、通顺。E、隔墙与墙不同时砌筑又不留成斜槎时可于墙中引出阳槎或在墙的灰缝中预埋拉结筋,每道不少于2根。F、接槎时必须将表面清理干净,浇水湿润,填实砂浆,保持灰缝平直。G、砖墙按图纸要求每50mm设置2φ6钢筋与构造柱拉结,具体要求见结构总说明。H、施工时需留置临时洞口,其侧边离交接处的墙面不少于500mm,顶部设边梁。4、钢筋工程=1\*GB2⑴凡进场钢筋须具备材质证明,原材料须取样试验,经复试合格后方可使用。=2\*GB2⑵钢筋绑扎前应仔细对照图纸进行翻样,根据翻样配料,施工前由工长对所管辖班组下发技术交底,准备施工工具,做好施工的准备工作。=3\*GB2⑶板中受力钢筋搭接,=1\*ROMANI级钢30d,=2\*ROMANII级钢40d,搭接位置:上部钢筋在跨中1/3范围内,下部钢筋在支座1/3范围内。=4\*GB2⑷钢筋保护层:基础40mm,柱、梁30mm,板20mm。保护层采用50mm×50mm的水泥砂浆块。板上部钢筋用马凳按梅花状支起。=5\*GB2⑸所有钢筋绑扎,须填写隐检记录,质评资料及目检记录,验收合格后方可进行下道工序。5、砼工程=1\*GB2⑴水泥进场后须做复试,经复试合格后由试验室下达配合比。施工中严格掌握各种材料的用量,并在搅拌机前进行标识,注明每立方米、每盘用量。同时搅拌时,须车车进磅,做好记录。=2\*GB2⑵浇筑前,对模板内杂物及油污、泥土清理干净。=3\*GB2⑶投料顺序:石子→水泥→砂子。=4\*GB2⑷本工程均采用插入式振捣器,一次浇筑厚度不宜超过振捣器作用部分长度的倍,捣实砼的移动间距不宜大于振捣器作用半径的倍。=5\*GB2⑸砼浇筑后1昼夜浇水养护,养护期不少于7d,砼强度未达到MPa之前不得上人作业。6、模板工程=1\*GB2⑴本工程模板采用钢木混合模板。模板支搭的标高、截面尺寸、平整度、垂直度应达到质量验收标准,以满足其钢度,稳定性要求。=2\*GB2⑵模板支撑应牢固可靠,安装进程中须有防倾覆的临时固定措施。=3\*GB2⑶本工程选用851脱模剂,每拆除一次模板经清理后涂刷脱模剂,再重新组装,以保证砼的外观质量。架子工程=1\*GB2⑴本工程采用双排架子防护,外设立杆距墙2m,里皮距墙50cm,立杆间距,顺水间距,间距不大于1m。=2\*GB2⑵架子底部夯实,垫木板,绑扫地杆。=3\*GB2⑶为加强架子的稳定性,每七根立杆间设十字盖,斜杆与地面夹角60o。=4\*GB2⑷为防止脚平架外倾,与结构采用钢性拉接,拉接点间距附和“垂四平六“的原则。=5\*GB2⑸外防护架用闭目式安全网进行封闭,两平网塔接和网下口必须绑孔紧密。=6\*GB2⑹结构架子高出作业层1m,每步架子满铺脚手板,要求严密牢固并严禁探头板。装饰工程装饰工程施工前,要组织质监部门、建设、设计、施工单位四方参加的主体结构工程核验收,对已完全体分部工程进行全面检查、发现问题及时处理,清除隐患,并做好装饰前材料、机具及技术准备工作。1、根据预算所需材料数量,提出材料进场日期,在不影响施工用料的原则下,尽量减少施工用地,按照供料计划分期分批组织材料进场。2、将墙面找方垂直线,清理基层,然后冲筋,按照图纸要求,分层找平垂直,阴阳角度方正,然后拉线作灰饼。底子灰应粘结牢固,并用刮杠刮平,木抹子抹平。3、罩面应均匀一致,并应在终凝前刮平压光,上三遍灰抹子。4、油漆、涂料施工:油漆工程施工时,施工环境应清洁干净,待抹灰、楼地面工程全部完工后方可施工,油漆涂刷前被涂物的表面必须干燥、清洁,刷漆时要多刷多理不流坠,达到薄厚均匀,色调一致,表面光亮。墙面涂料基层要求现整,对缝隙微小孔洞,要用腻子找平,并用砂纸磨平。为了使颜色一致,应使用同一配合比的涂料,使用时涂料搅匀,方可涂刷,接槎外留在阴阳角外必须保证涂层均匀一致表面不显刷纹。楼地面工程楼地面工程只作50厚豆石砼垫层。做垫层必须先冲筋后做垫层,其平整度要控制在4mm以内,加强养护4-5天后,才能进行上层施工。10、层面工程1、屋面保温层及找平层必须符合设计要求,防水采用防水卷材。2、做水泥砂浆找平层表面应平整压光,屋面与女儿墙交接处抹成R≥150mm圆角。3、本工程屋面材料防水,专业性强,为保证质量,我们请专业人员作防水层。4、原材料在使用前经化验合格后才能使用,不合格材料严禁使用。11、水、暖、电安装工程=1\*GB2⑴管道安装应选用合格的产品,并按设计放线,坡度值及坡向应符合图纸和规范要求。=2\*GB2⑵水、暖安装前做单项试压,完毕后做通、闭水后试验和打压试验,卫生间闭水试验不少于24小时。=3\*GB2⑶电预埋管路宜沿最近线路敷设,应尽量减少弯曲,用线管的弯曲丝接套丝,折扁裂缝焊接,管口应套丝用堵头堵塞。油漆防腐等均符合图纸各施工规范及质量评定标准。=4\*GB2⑷灯具、插座、开关等器具安装,其标高位置应符合设计要求,表面应平直洁净方正。=5\*GB2⑸灯具、插座、开关等器具必须选用合格产品,不合格产品严禁使用。=6\*GB2⑹做好各种绝缘接地电阻的测试和系统调整记录,检查配线的组序一定要符合设计要求。五、预防质量通病之措施本工程按优质工程进行管理与控制,其优质工程的目标体系与创优质工程的保证措施在本工程施工组织设计中做了详述。本措施不再述。创优质工程除对各分部、分项、工序工程施工中,精心操作,一丝不苟、高标准严要求作业外,关键是防止质量通病。为此,提出防止通病的作业措施如下:1、砖墙砌体组砌方法:=1\*GB2⑴、组砌方法:一顺一丁组砌,由于这种方法有较多的丁砖,加强了在墙体厚度方向的连结,砌体的抗压强度要高一些。=2\*GB2⑵、重视砖砌体水平灰缝的厚度不均与砂浆饱满度:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论