




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、广工操作系统实验报告操作系统实验报告学生学院计算机学院专业班级2010级计算机科学与技术四班学号3110006015学生姓名张法光指导教师何翠红2013年1月05日目录实验一、进程调度4实验二、作业调度8实验三、动态分区分配方式的模拟16实验四、文件系统2431实验一进程调度1、实验目的编写并调试一个模拟的进程调度程序,采用“短进程优先”调度算法对五个进程进行调度。以加深对进程的概念及进程调度算法的理解(2、实验原理在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。对调度的处理又都可采用不同的调度方式和调度算法。调度算法是指:根据系统的资源分配策略所规定的资源分配算法
2、。短进程优先调度算法是指对短进程优先调度的算法,它是从后备队列中选择一个或者若干个进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。短进程优先调度源程序如下:#include<stdio.h>#definen5#definenum5#definemax65535typedefstructprointPRO_ID;/进程号intarrive_time;/到达时间intsum_time;/运行总时间intflag;Pro;/整数排序intbubble(inttemp)inti,j,tem=0;for(i=1;i<num;i+)4in
3、tlastX=1;for(j=0;j<num-i;j+)if(tempj>tempj+1)tem=tempj;tempj=tempj+1;tempj+1=tem;lastX=0;if(lastX=1)break;returntemp0;/进程排序Probubble(Prop)inti,j;Protemp=0;Prosnum;for(i=0;i<num;i+)si=pi;for(i=1;i<num;i+)intlastX=1;for(j=0;j<num-i;j+)if(sj.sum_time>sj+1.sum_time)temp=sj;sj=sj+1;sj+1
4、=temp;lastX=0;if(lastX=1)break;returns0;5voidSPF(intp)if(n>0)inti,j,k,l,tc=0;Proseqn;Protemp_seqn;printf("*n");I*printf("*n");printf("10计科4班张法光3110006015n");printf("n");printf("实验一:短进程优先调度算法SPFn");printf("请依次输入5个进程的进程号、到达时间和执行时间n");print
5、f("成员变量用逗号隔开;进程间用回车隔开n");I*for(i=0;i<n;i+)scanf("%d,%d,%d",&seqi.PRO_ID,&seqi.arrive_time,&seqi.sum_time);printf("调度顺序是:n");/初始化tcinttempnum;for(i=0;i<num;i+)tempi=seqi.arrive_time;tc=bubble(temp);/tc是断点啊/flag表示对应i的pro的队列情况/-1表示未进入过队列,0表示在队列中,1表示被清除了fo
6、r(i=0;i<n;i+)seqi.flag=-1;for(i=0;i<n;i+)for(j=0;j<n;j+)if(seqj.flag!=1&&seqj.arrive_time<=tc)seqj.flag=0;for(j=0;j<n;j+)temp_seqj=seqj;if(seqj.flag!=0)temp_seqj.sum_time=max;6l=bubble(temp_seq).PRO_ID;for(j=0;j<n;j+)if(l=seqj.PRO_ID)k=j;tc=tc+bubble(temp_seq).sum_time;seqk
7、.flag=1;printf("%d",l);printf("n");voidmain()SPF(n);工匕工 £艺.一匚岫T ;*_3”上运行结果:4MHroi 必号 翻ey tg cn-n iniJK-3结果分析与实验小结非抢占式的短进程优先调度相对简单,有个易错的地方就是最早来的不管所需服务时间长短均必须先服务,而且数量可能不止一个,此时可以再根据短进程优先法则调度。总的来说,短进程优先调度算法可以照顾到实际上在所有进程中占很大比例的短进程,使它能比长进程优先执行,但不利于长进程的执行。2实验二作业调度1、实验目的本实验要求学生模拟作业调
8、度的实现,用高级语言编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解。2、实验内容及要求1、为单道批处理系统设计一个作业调度程序(1)、编写并调试一个单道处理系统的作业调度模拟程序。(2)、作业调度算法:分别采用先来先服务(FCFS)、响应比高者优先(HRN)的调度算法。(3)、由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的CPU时限等因素。(4)、每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资
9、源、作业状态、链指针等等。作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状。态之一。每个作业的最初状态总是等待W(5)、对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,并比较各种算法的优缺点。2、模拟批处理多道操作系统的作业调度(1)、写并调试一个作业调度模拟程序。(2)、作业调度算法:分别采用先来先服务(FCFS)和短作业优先调度算法(3)、在批处理系统中,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求,所需要的资源是否得到满足。作业调度程序负责从输入井选
10、择若干个作业进入主存,为它们分配必要的资源,当它们能够被进程调度选中时,就可占用处理器运行。作业调度选择一个作业的必要条件是系统中现有的尚未分配的资源可满足该作业的资源要求。但有时系统中现有的尚未分配的资源既可满足某个作业的要求也可满足其它一些作业的要求,那么,作业调度必须按一定的算法在这些作业中作出选择。当作业正常运行完毕或因发生错误非正常终止时,作业进入完成状态,此时,系统将收回该作业所占用的全部资源,并消除有关的JCR并输出显示作业运行情况及作业输出结果。3、实验设计方案及原理1、编写并调试一个单道处理系统的作业等待模拟程序。假设在单道批处理环境下有四个作业JOB1JOB2JOB3JOB
11、4已知它们进入系统的时间、估计运行时间。分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法,计算出作业的平均周转时间和带权的平均周转时间。8对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,并比较各种算法的优缺点。4、源程序清单(需附详细的注释)#include<stdio.h>#include<stdlib.h>#include<conio.h>#definegetpch(type)(type*)malloc(sizeof(type)#def
12、inenull0intn;floatT1=0,T2=0;inttimes=0;structjcb/作业控制块作业名作业到达时间作业开始时间作业需要运行的时间作业的响应比作业完成时间作业周转时间作业带权周转时间charname10;/intreachtime;/intstarttime;/intneedtime;/floatsuper;/intfinishtime;/floatcycletime;/floatcltime;/charstate;/作业状态structjcb*next;/结构体指针*ready=NULL,*p,*q;建立作业控制块队列 , 先将其排typedefstructjcbJ
13、CB;voidinital()/成先来先服务的模式队列inti;printf("n输入作业数:");scanf("%d",&n);for(i=0;i<n;i+)p=getpch(JCB);printf("nNo.%d输入作业名:",i);scanf("%s",p->name);getch();p->reachtime=i;printf("作业默认到达时间:%d",i);printf("n输入作业要运行的时间:");scanf("%d&quo
14、t;,&p->needtime);p->state='W'9p->next=NULL;if(ready=NULL)ready=q=p;elseq->next=p;q=p;voidoutput(JCB*q,intj)/*显示所有作业的情况*/JCB*pr=ready;floatf=0.0;printf("所有作业的情况:n");/列表显示所有作业的情况if(j=3)printf("作业名tt到达时间t所需运行间t响应比tt作业状态n");printf("%stt%dtt%dtt%ft%cn"
15、;,q->name,q->reachtime,q->needtime,q->super,q->state);while(pr)if(pr->super<=0)printf("%stt%dtt%dtt%ft%cn",pr->name,pr->reachtime,pr->needtime,f,pr->state);elseprintf("%stt%dtt%dtt%ft%cn",pr->name,pr->reachtime,pr->needtime,pr->super,p
16、r->state);pr=pr->next;elseprintf("作业名tt到达时间t所需运行间t作业状态n");printf("%stt%dtt%dtt%ctn",q->name,q->reachtime,q->needtime,q->state);while(pr)printf("%stt%dtt%dtt%ctn",pr->name,pr->reachtime,pr->needtime,pr->state);pr=pr->next;显示作业运行后的周转时间及带权周
17、转时间等voiddisp(JCB*q,intm)/if(m=3)/显示高响应比算法调度作业后的运行情况output(q,m);printf("n作业s正在运行,估计其运行情况:n",q->name);printf("开始运行时刻t完成时刻t周转时间t带权周转时间t相应比nn");printf("%dtt%dtt%ft%ft%fn",q->starttime,q->finishtime,q->cycletime,q->cltime,q->super);getch();else/显示先来先服务,最短作业
18、优先算法调度后作业的运行情况output(q,m);printf("n作业s正在运行,估计其运行情况:n",q->name);10printf("开始运行时刻t完成时刻t周转时间t带权周转时间nn");printf("%dtt%dtt%ft%fn",q->starttime,q->finishtime,q->cycletime,q->cltime);getch();voidrunning(JCB*p,intm)/运行作业if(p=ready)/先将要运行的作业从队列中分离出来ready=p->nex
19、t;p->next=NULL;elseq=ready;while(q->next!=p)q=q->next;q->next=p->next;p->starttime=times;/计算作业运行后的完成时间p->state='R'p->finishtime=p->starttime+p->needtime;p->cycletime=(float)(p->finishtime-p->reachtime);p->cltime=(float)(p->cycletime/p->needtime
20、);T1+=p->cycletime;T2+=p->cltime;disp(p,m);/调用disp()函数,显示作业运行情况times+=p->needtime;p->state='F'printf("n作业s已经完成!n请输入任意键继续free(p);/释放运行后的作业getch();voidsuper()/计算队列中作业的高响应比, 周转时间等等n",p->name);JCB*padv;padv=ready;doif(padv->state='W'&&(padv->reachti
21、me)<=times)padv->super=(float)(times-padv->reachtime+padv->needtime)/padv->needtime;padv=padv->next;while(padv!=NULL);voidfinal()/最后打印作业的平均周转时间,平均带权周转时间floats,t;11t=T1/n;s=T2/n;getch();printf("nn作业已经全部完成!");printf("n%d个作业的平均周转时间是:%f",n,t);printf("n%d个作业的平均带
22、权周转时间是%f:nnn",n,s);voidhrn(intm)/高响应比算法JCB*min;inti,iden;system("cls");inital();for(i=0;i<n;i+)p=min=ready;iden=1;super();doif(p->state='W'&&p->reachtime<=times)if(iden)min=p;iden=0;elseif(p->super>min->super)min=p;p=p->next;while(p!=NULL);runni
23、ng(min,m);/调用running()函数/forfinal();/调用running()函数voidfcfs(intm)/先来先服务算法inti,iden;system("cls");inital();for(i=0;i<n;i+)p=ready;iden=1;doif(p->state='W'&&p->reachtime<=times)iden=0;if(iden)p=p->next;while(p!=NULL&&iden);if(iden)i-;printf("n没有满足要求
24、的进程,需等待");times+;12if(times>100)printf("n时间过长");getch();elserunning(p,m);/调用running()函数final();/调用running()函数voidmain()/主函数intm;while(1)printf("*");printf("nn10计科4班张法光3110006015n");printf("实验2-作业调度系统n");printf("1.先来先服务算法n");printf("2.响应比
25、高者优先算法n");printf("3.退出程序n");printf("*n");printf("选择所要操作:n");scanf("%d",&m);switch(m)case 1:fcfs(m);getch();times=0;main();break;case 2:hrn(m);getch();times=0;main();break;case 3:exit(0);default:printf("选择错误,重新选择.");getch();system("cls&q
26、uot;);135、程序运行结果5.1先来先服务算法145.2响应比高者优先算法-a=.n4J1U!-ICS,.二“叫口叫5阻口制山曲前出jjUE'C占一£,-1-JU;'LIJSljjH时应M心7MHBW姓留Til*业工旧物族J,*加也,.1,白根口噌牛七性八号轴E凡1.756、结果分析与实验小结参考了几个作业调度的范例,作业调度实践起来并不难,但需要慢慢调试。和同学讨论了设计思路之后就开始做了,虽然有小错误,但是经过反复调试也修正了BUG153实验三动态分区分配方式的模拟1、实验目的:了解动态分区分配方式中的数据结构和分配算法,并进一步加深对动态分区存储管理方式及
27、其实现过程的理解2、实验内容:(1)用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程和回收过程。其中,空闲分区通过空闲分区链(表)来管理;在进行内存分配时,系统优先使用空闲区低端的空间。)假设初始状态下,可用的内存空间为640KB,并有下歹4n青求序列:(2?作业1申请130KB?作业2申请60KB?作业3申请100KB?作业2释放60KB?作业4申请200KB?作业3释放100KB?作业1释放130KB?作业5申请140KB?作业6申请60KB?作业7申请50KB?作业8申请60KB请分别采用首次适应算法和最佳适应算法进行内存的分配和回收,要求每次分配和回收后显示出空闲内存分
28、区链的情况。3、思考:讨论各种分配算法的特点。# 1)首次适应算法。使用该算法进行内存分配时,从空闲分区链首开始查找,直至找到一个能满足其大小要求的空闲分区为止。然后再按照作业的大小,从该分区中划出一块内存分配给请求者,余下的空闲分区仍留在空闲分区链中。该算法倾向于使用内存中低地址部分的空闲分区,在高地址部分的空闲分区很少被利用,从而保留了高地址部分的大空闲区。显然为以后到达的大作业分配大的内存空间创造了条件。缺点在于低址部分不断被划分,留下许多难以利用、很小的空闲区,而每次查找又都从低址部分开始,这无疑会增加查找的开销。# 2)最佳适应算法。该算法总是把既能满足要求,又是最小的空闲分区分配给
29、作业。为了加速查找,该算法要求将所有的空闲区按其大小排序后,以递增顺序形成一个空白链。这样每次找到的第一个满足要求的空闲区,必然是最优的。孤立地看,该算法似乎是最16优的,但事实上并不一定。因为每次分配后剩余的空间一定是最小的,在存储器中将留下许多难以利用的小空闲区。同时每次分配后必须重新排序,这也带来了一定的开销。# 、源程序清单(需附详细的注释)#include<iostream.h>#include<stdlib.h># defineFree0/空闲状态# defineBusy1/已用状态# defineOK1/完成# defineERROR0/出错# defin
30、eMAX_length640/最大内存空间为640KBtypedefintStatus;typedefstructfreearea/定义一个空闲区说明表结构intID;/分区号longsize;/分区大小longaddress;/分区地址intstate;/状态ElemType;/线性表的双向链表存储结构typedefstructDuLNode/doublelinkedlistElemTypedata;structDuLNode*prior;/前趋指针structDuLNode*next;/后继指针DuLNode,*DuLinkList;DuLinkListblock_first;/头结点Du
31、LinkListblock_last;/尾结点Statusalloc(int);/内存分配Statusfree(int);/内存回收StatusFirst_fit(int,int);/首次适应算法StatusBest_fit(int,int);/最佳适应算法voidshow();/查看分配StatusInitblock();/开创空间表StatusInitblock()/开创带头结点的内存空间链表17block_first=(DuLinkList)malloc(sizeof(DuLNode);block_last=(DuLinkList)malloc(sizeof(DuLNode);block
32、_first->prior=NULL;block_first->next=block_last;block_last->prior=block_first;block_last->next=NULL;block_last->data.address=0;block_last->data.size=MAX_length;block_last->data.ID=0;block_last->data.state=Free;returnOK;/分配主存Statusalloc(intch)intID,request;"cout<<&q
33、uot;请输入作业(分区号):cin>>ID;cout<<"请输入需要分配的主存大小(单位:KB):"cin>>request;if(request<0|request=0)cout<<”分配大小不合适,请重试"<<endl;returnERROR;if(ch=2)/选择最佳适应算法<<endl;if(Best_fit(ID,request)=OK)cout<<”分配成功elsecout<<”内存不足,分配失败"<<endl;returnOK
34、;else/默认首次适应算法if(First_fit(ID,request)=OK)cout<<”分配成功"<<endl;elsecout<<”内存不足,分配失败"<<endl;returnOK;/首次适应算法StatusFirst_fit(intID,intrequest)/传入作业名及申请量/为申请作业开辟新空间且初始化18DuLinkListtemp=(DuLinkList)malloc(sizeof(DuLNode);temp->data.ID=ID;temp->data.size=request;temp
35、->data.state=Busy;DuLNode*p=block_first->next;while(p)if(p->data.state=Free&&p->data.size=request)/有大小恰好合适的空闲块p->data.state=Busy;p->data.ID=ID;returnOK;break;if(p->data.state=Free&&p->data.size>request)/有空闲块能满足需求且有剩余"temp->prior=p->prior;temp->
36、;next=p;temp->data.address=p->data.address;p->prior->next=temp;p->prior=temp;p->data.address=temp->data.address+temp->data.size;p->data.size-=request;returnOK;break;p=p->next;returnERROR;Status/最佳适应算法Best_fit(intID,intrequest)intch;/记录最小剩余空间DuLinkListtemp=(DuLinkList)ma
37、lloc(sizeof(DuLNode);temp->data.ID=ID;temp->data.size=request;temp->data.state=Busy;DuLNode*p=block_first->next;DuLNode*q=NULL;/记录最佳插入位置while(p)/初始化最小空间和最佳位置if(p->data.state=Free&&19(p->data.size>request|p->data.size=request)q=p;ch=p->data.size-request;break;p=p-&g
38、t;next;while(p)if(p->data.state=Free&&p->data.size=request)/空闲块大小恰好合适p->data.ID=ID;p->data.state=Busy;returnOK;break;if(p->data.state=Free&&p->data.size>request)/空闲块大于分配需求if(p->data.size-request<ch)/剩余空间比初值还小ch=p->data.size-request;/更新剩余最小值q=p;/更新最佳位置指向p
39、=p->next;if(q=NULL)returnERROR;/没有找到空闲块else/找到了最佳位置并实现分配temp->prior=q->prior;temp->next=q;temp->data.address=q->data.address;q->prior->next=temp;q->prior=temp;q->data.address+=request;q->data.size=ch;returnOK;/主存回收Statusfree(intID)(20DuLNode*p=block_first;while(p)(if
40、(p->data.ID=ID)(p->data.state=Free;p->data.ID=Free;if(p->prior->data.state=Free)/与前面的空闲块相连(p->prior->data.size+=p->data.size;p->prior->next=p->next;p->next->prior=p->prior;if(p->next->data.state=Free)/与后面的空闲块相连(p->data.size+=p->next->data.size
41、;p->next->next->prior=p;p->next=p->next->next;break;p=p->next;)returnOK;)/显示主存分配情况voidshow()(cout<<"+n"cout<<"+主存分配情况+n"cout<<"+n"DuLNode*p=block_first->next;while(p)(cout<<"分区号:";if(p->data.ID=Free)cout<&l
42、t;"Free"<<endl;elsecout<<p->data.ID<<endl;cout<<"起始地址:"<<p->data.address<<endl;cout<<”分区大小:"<<p->data.size<<"KB"<<endl;cout<<"状态:";if(p->data.state=Free)cout<<"空闲&quo
43、t;<<endl;elsecout<<"已分酉己"<<endl;cout<<""<<endl;21p=p->next;)/函数voidmain()intch;/算法选择标记cout<<"10计科4班张法光3110006015n"cout<<"实验三n"cout<<"动态分区分配方式的模拟n"cout<<"1首次适应算法n"cout<<"2最佳
44、适应算法n"cout<<"请选择分配算法:"cin>>ch;Initblock();/开创空间表intchoice;/操作选择标记while(1)cout<<"*1:分配内存n"cout<<"*2:回收内存n"cout<<"*3:查看分配n"cout<<"*0:退出n"cout<<"请输入您的操作:"cin>>choice;if(choice=1)alloc(ch);/分
45、配内存elseif(choice=2)/内存回收intID;cout<<"请输入您要释放的分区号:"cin>>ID;free(ID);elseif(choice=3)show();/显示主存elseif(choice=0)break;/退出else/输入操作有误cout<<"输入有误,请重试"<<endl;continue;225、程序运行结果首次适应算法:236、结果分析与实验小结本次实验比较难,首次最佳适应算法和对已分配分区的释放原理比较繁琐,这里同样采取双链表指针操作结构体来存储已分配分区。为了更好的
46、实现分配和释放功能,最好采用函数对空闲分区进行排序。总得来说,主存分配和内存回收颇具锻炼价值,涉及到主存的划分,作业的首次适应算法分配内存,这些都需要深入理解和动手实践验证。244实验四文件系统1、实验目的:通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。2、预习与参考:教材中文件系统的相关知识。3、实验要求(设计要求)1(要求设计一个n个用户的文件系统,文件目录采用两级结构2(对文件必须设置保护措施;3(至少有Create、delete、open、close、read、write等命令。255、源程序清单(需附详细的注释)#in
47、clude<stdio.h>#include<stdlib.h>#include<iostream>#defineNULL0#definegetpch(type,num)(type*)malloc(sizeof(type)*num)structufd/*第二级:用户文件目录UFD*/charfilename10;/*文件名*/charprocode3;/*保护码1:读2:写3:执行*/intlength;/*文件长度*/*p;typedefstructufdUFD;structmdf/*第一级:主目录MDF*/charname10;/*用户名*/UFD*di
48、rectory;/*文件目录指针*/maindir10;/*用户数组*/typedefstructmdfMDF;structafd/*文件运行目录*/charfilename10;/*文件名*/charprocode3;/*保护码1:读2:写3:执行*/intrw;/*读写指针初始状态读:0写:文件长度*/afd5;intusernum,opennum;/*登陆用户数量打开文件数量*/intfilenum10;/*所有的用户目录下的文件数目*/charusername10;/*当前登陆系统的用户名*/charcommand10="create","delete&q
49、uot;,"open","close","read","write","display","quit"/*文件操作命令*/voidlogin()/*用户注册,信息写入database文件*/inti,j;FILE*fp;intloginum;intcreatnum10;printf("tt=注册页面=nn");26printf("tt请输入注册的用户数量:");scanf("%d",&loginum);for
50、(i=0;i<loginum;i+)printf("tt请输入第d用户名二i+1);scanf("%s",);for(i=0;i<loginum;i+)printf("tt请输入s用户新建文件数(小于10):",);scanf("%d",&creatnumi);p=getpch(UFD,10);maindiri.directory=p;for(j=0;j<creatnumi;j+)printf("tt请输入新建文件名:");sc
51、anf("%s",pj.filename);,2:写,3:执行.):");printf("tt请输入要建立的文件的属性(1:读scanf("%s",code);printf("tt请输入要构造的文件的长度:");scanf("%d",&pj.length);fp=fopen("database.txt","wb");fwrite(&loginum,sizeof(int),1,fp);/*写已注册用户数量到dat文件*/for(i
52、=0;i<loginum;i+)fwrite(,sizeof(char)*10,1,fp);/*写已注册用户名到dat文件*/for(i=0;i<loginum;i+)fwrite(&creatnumi,sizeof(int),1,fp);/*写用户新建文件数量到dat文件*/p=maindiri.directory;/*UFD获得文件目录指针*/fwrite(p,sizeof(UFD),10,fp);/*写用户文件目录指针地址到dat文件*/fclose(fp);printf("ntt=注册完毕=n");printf(&quo
53、t;ntt");27system("pause");system("cls");voidinit()/*初始化读入login信息*/inti,j;FILE*fp;fp=fopen("database.txt","rb");if(fp=NULL)printf("nt警告:根目录不存在记录,请先注册用户n");login();fp=fopen("database.txt","rb");fread(&usernum,sizeof(int),1,
54、fp);/*读入已注册用户数量*/for(i=0;i<usernum;i+)fread(,sizeof(char)*10,1,fp);/*读入已注册用户名*/p=getpch(UFD,10);maindiri.directory=p;for(i=0;i<usernum;i+)fread(&j,sizeof(int),1,fp);filenumi=j;/*读入用户新建文件数量*/p=maindiri.directory;/*获得文件目录指针*/fread(p,sizeof(UFD),10,fp);/*读入用户文件目录指针地址p*/opennum=0;
55、/*运行文件数*/新建文件 */voidcreatefile(intuserid)/*system("cls");charcfilename10;intfilelen,i;charcode3;if(filenumuserid>=10)/*如果用户的文件已有10个*/printf("ntt用户的文件数量已达到上限,即10个!n");return;28printf("tt=新建文件页面=nn");printf("tt请输入要建立的文件名:");scanf("%s",cfilename);for
56、(i=0;i<filenumuserid;i+)/*检查是否有同名文件,有则提示然后返回*/f(strcmp(p+i)->filename,cfilename)=0)iprintf("tt文件名s已存在!n",cfilename);system("pause");system("cls");return;printf("tt请输入要建立的文件的属性(1:读2:写3:执行):");scanf("%s",code);printf("tt请输入要建立的文件的长度:");
57、scanf("%d",&filelen);strcpy(pfilenumuserid.filename,cfilename);/*添加新文件名*/strcpy(code,code);/*添加保护码*/pfilenumuserid.length=filelen;/*添加文件长度*/filenumuserid=filenumuserid+1;/*更新文件数量*/printf("tt=<%s>文件建立成功!=n",cfilename);system("pause");system(&q
58、uot;cls");voiddeletefile(intuserid)/*删除文件*/system("cls");chardfilename10;inti,j;printf("tt=删除文件页面=nn");printf("tt请输入要删除的文件名:");scanf("%s",dfilename);for(i=0;i<filenumuserid;i+)找到要删除的文件*/if(strcmp(pi.filename,dfilename)=0)/*for(j=i;j<filenumuserid-1;j+)strcpy(pj.filename,pj+1.filename);strcpy(code,pj+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 财政咨询整体方案
- 孝感孝南区中烟工业2025秋招新型烟草研发岗位面试模拟题及答案
- 疫情应急预案由谁来启动
- 咨询方案的指定
- 应急与预案分为哪几种形式
- 中国邮政2025辽阳市秋招电商运营岗位高频笔试题库含答案
- 中国邮政集团2025赣州市秋招网申开放题题库及答案
- 工业基金考试题及答案
- 吕梁市烟草公司2025秋招行政管理岗位面试模拟题及答案
- 电子公交基础施工方案
- 高考688个高频词汇 word版
- 农副产品购销合同完整版(2篇)
- GB/T 9115.4-2000环连接面对焊钢制管法兰
- 一年级数学上册左、右练习题及答案解析
- GB 9743-1997轿车轮胎
- 小学语文口语交际教学讲座PPT
- 上海建筑装饰集团发展战略报告(doc 30)
- 《基础统计》教学案例“郑州市大瓶装纯水市场调查”统计应用案例
- DB36_T 1157-2019 瓷土、瓷石矿产地质勘查规范(高清无水印-可复制)
- 《大型企业财务数智化转型白皮书》
- 电子课件-《网络营销(第三版)》-A24-2998ppt课件
评论
0/150
提交评论