版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统课程设计题目名称 多用户多级目录共享文件系统的实现 _学生学院 计算机学院 专业班级 10级计算机科学与技术7班 学 号 学生姓名 指导教师 刘老师 20年月 日一、 可行性分析随着信息化进程,文件管理越来越受到重视,并且逐渐成为国内外业界研究的热点。在现有的操作系统中,几乎都是通过文件系统来组织和管理计算机中所存储的程序和数据等大量的文件。在现代OS中,几乎毫毛例外地是通过文件系统来组织和管理在计算机中存储 和大量程序和数据的;或者说,文件系统的管理功能,是通过把它所管理的程序和数据组织成一系列文件的方法来实现的。而文件则是指具有文件名的若干相关元素的集合。元素通常是记录,而记录又是
2、一组有意义的数据项的集合。通过分析,可知文件系统对大多数文件的操作,器过程大致都是这样两步:第一步是通过检索文件目录来找到指定文件的属性及其在外存上的位置;第二步是对文件实施相应的操作,如读文件或写文件。为了便于管理和控制文件,根据系统管理员或用户所规定的存取控制属性,将文件分为只读文件、读写文件和只执行文件三类。而文件系统的模型主要分为三个层次,分别是对象及其属性、对对象的操纵和管理的软件集合、文件系统接口,其最底层的是对象及其属性;中间层对对象进行操纵和管理的软件集合;最高层是文件系统提供给用户的接口。用户通过文件系统所提供的系统调用实施对文件的操作,如创建文件、删除无文件、读文件、写文件
3、等,为了方便用户使用文件而提供了更多对文件的操作,如打开和关闭文件。软硬件可行性分析:本模拟系统的实现需要一台PC机作为硬件设备,此外,软件开发环境包括:Win7、VC+6.0,.因此,该模拟系统具备实现条件,综合分析,系统在成本、技术、操作上,都是可行的。技术可行性分析:在当前的技术条件下,该系统的各个功能模块在理论上而言都是能实现的;根据自己掌握的技术情况,在规定的期限内,系统的开发设计能完成。二、 需求分析1、 功能需求分析功能划分:本模拟系统主要针对文件的管理和操作名主要有:创建用户、文件、文件夹,读文件,写文件,执行文件,关闭文件,删除用户、文件夹、文件的功能。创建用户、文件、文件夹
4、:在对系统发出操作命令之前必须先登录用户,然而登录之前必须要已经创建该用户。在创建完用户后,可通过登录用户来创建文件和文件夹。在创建文件时可设置文件的属性和输入文件的内容。读文件:可通过登录用户来读取任何已创建的只读或读写文件的内容;如果所要读的文件不是可读文件时,系统会显示该文件不可读;如果所读文件不存在,系统会显示文件不存在。写文件:登录用户后,用户可写或重写读写文件中的内容,并保存文件中的重写内容,以供下次读取;当所要写的文件不是可写的文件时,系统会显示该文件不可写;当所要写的文件并不存在时,系统会显示该文件不存在。执行文件:登录用户后,用户可执行系统中已创建的执行文件;当该文件不是可执
5、行文件时,系统会显示该文件不可执行;当该文件不存在时,系统将会显示该文件不存在。关闭文件:可通过选择关闭文件的功能选项,来关闭系统中所有打开的文件,如果没有文件被打开,则系统会显示没有文件打开。删除用户、文件、文件夹:登录用户后,用户可通过选择删除的功能选项来删除不想再保存的文件和文件夹,删除后,用户会自动注销;当选择删除用户的功能选项时,系统会删除该用户,以及该用户所创建的所有文件和文件夹。2、 非功能需求分析在现代计算机系统中,要用到大量的程序和数据,因内存容量有限,且不能长期保存,故而平时总是把它们以文件的形式存放在外存中,需要时再随时将它们调入内存。如果有用户注解管理外存上的文件,不仅
6、要求用户熟悉外存特性,了解各文件的属性,以及它们在外存上的位置,而且在多用户环境下,还必须能保持数据的安全性和一致性。显然,这是用户所不能胜任、也不愿意承担的工作。于是,取而代之的便是在操作系统中又增加了文件管理功能,即构成一个文件系统,负责管理在外存上的文件,并把对文件的存取、共享和保护等手段提供给用户。这不仅方便了用户,保证了文件的安全性,还可有效地提高系统资源的利用率。在该课程设计中,主要设计了一个模拟的多用户的二级共享的文件系统。通过对用户的管理,文件和文件夹的物理结构,目录的结构和对文件、文件夹的操作的实现,来对系统中的所有文件进行管理。三、 概要设计1、整体思路概述运行程序时,首先
7、系统要进行初始化,然后等待输入操作类型,但是在未创建用户之前,只能进行显示目录(此时为空目录)和退出的操作。当用户创建成功后,即可通过登录用户来创建文件和文件夹。在输入操作选项之后,必须先登录用户,当确认用户身份正确后,系统才能根据指定的命令进行操作,否则,不能进行操作,必须创建用户后,才能以该用户的身份进行操作。操作完之后,用户会自动退出,没发出一个操作命令,用户必须登录一次。只有在发出的命令是显示目录或退出或返回上级目录时,才不需要用户的登录。2、 数据流图显示目录42513主菜单输入界面模拟文件系统创建删除文件操作退出 创建用户 创建文件 创建文件夹 上级菜单 删除用户 删除文件 删除文
8、件夹 上级菜单读文件 写文件 执行文件 打开文件 关闭文件 显示目录 上级菜单3、 功能流程图开始输入功能选项创建文件操作删除退出显示目录创建文件创建用户创建文件夹删除文件删除用户删除文件夹读文件写文件执行文件打开文件关闭文件显示目录四、 详细设计1、实现原理本程序是一个文件系统模拟程序,模拟文件管理的工作过程。本程序设计一个最多有10个用户的文件系统,实现文件系统的模拟管理过程,可以进行创建用户、删除用户、创建文件、删除文件、创建文件夹、删除文件夹、读文件、写文件、执行文件、打开文件、关闭文件、显示目录等操作。程序设置了主目录MFD、用户文件目录UFD和用户文件夹目录UDD,为打开文件设置了
9、运行目录AFD。文件保护简单使用了保护码:只读为r,读写为wr,只执行为do,其他则表示不允许读写、执行。用户名文件目录指针文件夹目录指针用户名文件目录指针文件夹目录指针文件名保护码文件长度文件内容文件夹名下一文件夹指针下一文件指针子文件夹指针下一文件指针打开文件名保护码文件内容读写指针MFDUFDUDDAFD。2、重要数据结构说明typedef struct ufd是文件的数据结构,即用户文件目录。typedef struct udd是文件夹的数据结构,即用户文件夹目录。typedef struct mfd是用户的数据结构,即主文件目录。typedef struct afd是运行中文件的数据
10、结构。typedef struct sfile是指向文件的索引节点的数据结构。1)用户的数据结构typedef struct mfdchar username10;/*用户名*/struct ufd *link;/*指向该用户的第一个文件*/struct udd *clink;/*指向该用户的第一个文件夹*/MFD;用来描所创建用户的信息的结点,包含用户名、指向用户文件和文件夹的两个指针。所以的结点都存放在一个名字为filesysten的数组中。2)文件夹的数据结构typedef struct uddchar foldername10;/*文件夹名*/struct ufd *clink;/*指
11、向该文件夹的第一个文件*/struct udd *cnext;/*指向该文件夹的第一个文件夹*/struct udd *link;/*指向同级文件夹*/UDD;用来描述文件夹的信息的结点。3)文件的数据结构typedef struct ufdchar filename10;/*文件名*/char filecon100;/*文件内容*/char procode8;/*属性*/int length;/*文件长度*/struct ufd *nextfile;/*指向下一个文件*/UFD;用来描述文件信息的数据结构,同个用户的文件结点用一条链链接在一起。4)运行文件的数据结构typedef struc
12、t afd/*运行文件目录*/char filename10;/*打开文件名*/char filecon100;/文件内容char procode4;/属性int rwpointer;/*读写指针*/AFD;存放着运行文件的信息,标示着某文件正在执行,当关闭文件时,释放结点。5)共享文件的结点的数据结构typedef struct sfilechar username10; /用户名struct ufd *file; /共享的文件struct sfile *next; /指向下一个共享文件的指针SFILE;每一个文件都有一个共享的结点,该节点存放文件的信息、文件的创造者的名字和指向下一个共享文
13、件的指针,所有文件的共享结点链接在一起,由sharefile指针指向该共享链。3、重要函数说明void displayallfile()是用于显示目录的函数;在实验中,我将创建的所有用户都存储在一个结点数组中,每个用户结点都有指向其文件和文件夹的指针,通过遍历结点数组来遍历用户,通过用户的指针来遍历用户的文件和文件夹。void createuser()是用于创建用户的函数;将创建的用户以mfd结点的结构存储在filesystem数组中。int findusername(char * username)是用户查找用户的函数,当找到函数时返回保存用户的节点的下标;当返回值大于等于用户个数时,表示找
14、不到用户。void deleteuser()是用于删除用户的函数;在filesystem数组中寻找指定名字的用户,当找到该用户时,将用户从数组中删除,并将数组中该用户后面的其他用户的下标往前移一位,即减一;如果找不到指定用户,则输出:“用户不存在!删除失败!”。sfile* findsharefile(char *filename)是用于查找共享文件的函数,当找到共享文件锁时返回指向该文件的节点指针,如果找不到,则返回空。UFD * findfilename(char *filename,UFD *filepointer)是查找文件的函数,返回指向特定文件名的指针,或返回值为NULL。UDD
15、* findfoldername(char *foldername,UDD *folderpointer)是查找文件夹的函数,返回指向特定文件名的指针,或返回值为NULL。void displayfile(UFD *link)是用于显示文件属性的函数。void createfile()是用于创建文件的函数;当要创建文件时,首先输入登录的用户名,如果该用户不存,输入是否创建用户,否则退出,是的话则创建用户,然后再创建文件;当用户存在时,则直接创建文件。创建文件时,若该登录的用户的文件中没有同名文件,则直接创建,否则输出:“文件名已存在,请输入新的文件名!”,通过输入新的文件名后再创建文件。每创建
16、一个文件,都会为文件创建一个共享结点,添加到共享链中。void createfolder()是用于创建文件夹的函数;首先输入登陆的用户名,然后再创建,步骤与穿件文件相似,只是没有共享结点。void deletefile()是用于删除文件的函数;首先查找文件所属用户,然后再查找文件,找到则删除,否则删除失败。void deletefolder()是用于删除文件夹的函数。AFD * openfile()是用于打开文件的函数,当找到文件时打开文件,创建该文件的运行文件结点,并返回;找不到文件时,返回值为NULL;当要打开一个文件之前,首先先登录,如果登录的用户不存在则不能打开文件,如果用户存在,输入
17、需要打开的文件名,如果用户没有创建该文件则寻找共享文件中是否存在其他用户创建的该文件,有则打开,为文件创建运行文件的结点,没有则输出不存在该文件。在对文件的所有操作之前都需要先调用该函数打开文件,才能进行操作。void closefile()是用于关闭文件的函数;关闭文件时释放文件的运行文件结点。void readfile()是用于读文件的函数;打开文件后首先判断文件是否可读,如果是可读文件则读出文件中的内容,否则输出文件不可读。void writefile()是用于写文件的函数;首先打开文件,判断文件是否可写。void executefile()是用于执行文件的函数。/菜单,即有关用户界面的
18、函数void menu()是主菜单,程序执行时就会显示该菜单,初始化界面,并通过该菜单选择相应的功能选项。void menu1()是menu的一个子菜单,包含了所有的创建功能选项和返回上级菜单的选项;void menu2()是menu的一个子菜单,包含了所有的删除功能选项和返回上级菜单的选项;void menu3()是menu的一个子菜单,包含了对文件的各种操作选项、返回上级菜单的选项和显示目录的选项。4、 相关代码UFD *rw_pointer;/*读写指针*/AFD *afd=NULL; /运行文件MFD filesystem10; /存放用户的数组sfile *sharefile=NUL
19、L;/共享文件void displayallfile()/*显示目录*/int i;UFD *p; /指向某个文件的指针UDD *q; / 指向用户文件目录的指针system("cls");/*清屏*/printf("t* * * * * * * * * * * * * * * *n");printf("tt显示目录n"); printf("t* * * * * * * * * * * * * * * *n");for(i=0;i<num;i+)printf("用户 :%s 目录如下!n"
20、,filesystemi.username); p=filesystemi.link; /指向该用户的第一个文件q=filesystemi.clink; /指向该用户的第一个文件夹while(p) printf("t文件名: %st|",p->filename);printf("文件属性: %st|",p->procode);printf("文件长度: %dn",p->length);p=p->nextfile;while(q) printf("t文件夹名: %sn",q->folde
21、rname);q=q->link;void createuser()/*建立用户*/int i;char username10;system("cls");/*清屏*/printf("t* * * * * * * * * * * * * * * *n");printf("tt建立用户n"); printf("t* * * * * * * * * * * * * * * *n");if(num>=10)/*用户文件目录已满,创建文件失败*/printf("用户已满n创建文件失败!n")
22、;return;printf("输入用户名:n");scanf("%s",username);for(i=0;i<num;i+)if (!strcmp(filesystemi.username,username)printf("用户名已存在,请输入新用户名!n");scanf("%s",username); strcpy(filesystemnum.username,username);num+;printf("用户已创建!n");/*-查找用户*/int findusername(cha
23、r * username)/返回用户名下标,当I=NUM时,用户不存在int i;i=0;while(i<num)if(!strcmp(filesystemi.username ,username)break;i+;return i;void deleteuser()/*删除用户*/int i;char cs,username10;UFD *p1,*p2;UDD *p3,*p4;system("cls");/*清屏*/printf("t* * * * * * * * * * * * * * * *n");printf("tt删除用户n&q
24、uot;); printf("t* * * * * * * * * * * * * * * *n");printf("n输入用户名:n");scanf("%s",username);i=findusername(username);/*返回用户名下标*/if(i>=num)printf("用户不存在!n删除失败!n");return ;elseprintf("是否删除用户%s及用户%s下所有东西?(y/n)",filesystemi.username,filesystemi.usernam
25、e);cscanf("%c",&cs);if(cs='y')p1=p2=filesystemi.link;/用户的第一个文件while(p2)p2=p2->nextfile;free(p1);p1=p2;p3=p4=filesystemi.clink;/用户的第一个文件夹while(p2)p4=p4->link;free(p3);p3=p4;for(i;i<num-1;i+)filesystemi=filesystemi+1;num-;printf("n用户已删除!n");elsereturn;sfile* fi
26、ndsharefile(char *filename) /*查找共享文档*/sfile *k;k=sharefile;while(k && strcmp(filename,k->file->filename)k=k->next;return k;/*-查找文件*/UFD * findfilename(char *filename,UFD *filepointer)/返回指向特定文件名的指针,或返回值为NULL*/UFD *k;k=filepointer;while(k&&strcmp(filename,k->filename)k=k-&g
27、t;nextfile;return k;/* 查找文件夹*/UDD * findfoldername(char *foldername,UDD *folderpointer)/返回指向特定文件名的指针,或返回值为NULL*/UDD *k;k=folderpointer;while(k&&strcmp(foldername,k->foldername)k=k->link;return k;void displayfile(UFD *link) /*显示文件属性*/UFD *p;p=link;if(!p)printf("n此目录没有该文件!");re
28、turn;printf("n用户文件如下:n");while(p)printf("%st|",p->filename);printf("%st|",p->procode);printf("%dnn",p->length);p=p->nextfile;void createfile()/*-创建文件*/char cx;char username10;char filename10;int i,j;UFD *p1,*p2,*newfile;sfile *q1 = sharefile;system
29、("cls");/*清屏*/printf("t* * * * * * * * * * * * * * * *n");printf("tt创建文件n"); printf("t* * * * * * * * * * * * * * * *n");if(num>=10)/*用户文件目录已满,创建文件失败*/printf("用户文件目录已满n创建文件失败!n");return;printf("输入登录的用户名:n");scanf("%s",username)
30、;i=findusername(username);/*返回用户名下标*/if(i=num)/*如果该用户不存在,且用户个数不小于10,先创建用户再建立用户文件*/printf("用户不存在,是否建立用户?(y/n)");cscanf("%c",&cx); printf("n"); if(cx='y')strcpy(filesystemnum.username ,username);/*创建用户目录*/num+;/*为刚创建的用户建立文件*/newfile =(UFD *)malloc(sizeof(UFD);
31、/为新建文件分配空间newfile->nextfile=NULL;filesystemnum-1.link=newfile;/该新建用户的第一个文件为newfileprintf("文件名:");scanf("%s",filesystemnum-1.link->filename);printf("属性(r只读,wr读写,do可执行):");scanf("%s",filesystemnum-1.link->procode);printf("长度:");scanf("%d&
32、quot;,&(filesystemnum-1.link->length);printf("文件已创建!n");if(sharefile=NULL)sharefile=(sfile*)malloc(sizeof(sfile);sharefile->file=filesystemnum-1.link;strcpy(sharefile->username, username);sharefile->next=NULL;elseq1=(sfile*)malloc(sizeof(sfile);q1->file=filesystemnum-1.l
33、ink;strcpy(q1->username, username);q1->next=sharefile;sharefile=q1;elsereturn;else/*为已存在的用户建立文件*/p1=p2=filesystemi.link ;printf("输入文件名:");scanf("%s",filename);if(!p1)newfile=(UFD *)malloc(sizeof(UFD); newfile->nextfile=NULL; strcpy(newfile->filename,filename); printf(
34、"属性(r只读,wr读写,do可执行):"); scanf("%s",newfile->procode); printf("长度:"); scanf("%d",&(newfile->length); filesystemi.link=newfile;if(sharefile=NULL)sharefile=(sfile*)malloc(sizeof(sfile);sharefile->file=filesystemi.link;strcpy(sharefile->username, u
35、sername);sharefile->next=NULL;elseq1=(sfile*)malloc(sizeof(sfile);q1->file=filesystemi.link;strcpy(q1->username, username);q1->next=sharefile;sharefile=q1;else while(p2) if (!strcmp(p2->filename,filename) printf("文件名已存在,请输入新文件名!n"); scanf("%s",filename); p1=p2;p2=p
36、2->nextfile; newfile=(UFD *)malloc(sizeof(UFD); newfile->nextfile=NULL; strcpy(newfile->filename,filename); printf("属性(r只读,wr读写,do可执行):"); scanf("%s",newfile->procode); printf("长度:"); scanf("%d",&(newfile->length); p1->nextfile=newfile;if
37、(sharefile=NULL)sharefile=(sfile*)malloc(sizeof(sfile);sharefile->file=p1->nextfile;strcpy(sharefile->username, username);sharefile->next=NULL;elseq1=(sfile*)malloc(sizeof(sfile);q1->file=p1->nextfile;strcpy(q1->username, username);q1->next=sharefile;sharefile=q1;printf("
38、;文件已创建!n"); printf("是否输入文件内容?(y/n)");cscanf("%c",&cx);printf("n");if(cx='y')printf("请输入文件内容,用'#'键结束n");cscanf("%c",&newfile->filecon0);for(j=0;newfile->fileconj!='#'j+)cscanf("%c",&newfile->
39、fileconj+1); newfile->length=j;printf("n");void createfolder()/*-创建文件夹*/char cx;char username10;char foldername10;int i;UDD *p1,*p2,*newfolder;system("cls");/*清屏*/printf("t* * * * * * * * * * * * * * * *n");printf("tt创建文件夹n"); printf("t* * * * * * * *
40、* * * * * * * *n");if(num>=10)/*用户文件目录已满,创建文件夹失败*/printf("用户文件目录已满n创建文件失败!n");return;printf("输入登录的用户名:n");scanf("%s",username);i=findusername(username);/*返回用户名下标*/if(i=num)/*如果该用户不存在,且用户个数不小于10,先创建用户再建立用户文件夹*/printf("用户不存在,是否建立用户?(y/n)");cscanf("%
41、c",&cx); printf("n"); if(cx='y')strcpy(filesystemnum.username ,username);/*创建用户目录*/num+;/*为刚创建的用户建立文件夹*/newfolder =(UDD *)malloc(sizeof(UDD);newfolder->cnext=NULL; /该文件夹的第一个子文件夹newfolder->clink=NULL; /该文件夹的第一个子文件newfolder->link=NULL; /该文件夹的下一个同级文件夹filesystemnum-1.
42、clink=newfolder; /该用户的第一个文件夹printf("文件夹名:");scanf("%s",filesystemnum-1.clink->foldername);printf("文件夹已创建!n");elsereturn;else/*为已存在的用户建立文件夹*/p1=p2=filesystemi.clink ;printf("输入文件夹名:");scanf("%s",foldername);if(!p1)/该用户还没有任何文件夹newfolder=(UDD *)mallo
43、c(sizeof(UDD);newfolder->cnext=NULL;/该文件夹的第一个子文件夹为空newfolder->clink=NULL;/该文件夹的第一个子文件为空newfolder->link=NULL; /该文件夹的下一个同级文件夹为空 strcpy(newfolder->foldername,foldername); filesystemi.clink=newfolder;else while(p2) if (!strcmp(p2->foldername,foldername) printf("文件夹名已存在,请输入新文件夹名!n&quo
44、t;); scanf("%s",foldername); p1=p2;p2=p2->link; newfolder=(UDD *)malloc(sizeof(UDD);newfolder->cnext=NULL;/该文件夹的第一个子文件夹为空newfolder->clink=NULL;/该文件夹的第一个子文件为空newfolder->link=NULL; /该文件夹的下一个同级文件夹为空 strcpy(newfolder->foldername,foldername); p1->link=newfolder;printf("文件
45、夹已创建!n");void displayuser()/显示用户目录int i;if(num<=0)return;printf("n用户目录如下! ");for(i=0;i<num;i+);printf("n%s",filesystemi.username);*/void deletefile()/*删除文件*/int i;char cy;char username10;char filename10;UFD *p1,*p2;system("cls");/*清屏*/printf("t* * * * *
46、* * * * * * * * * * *n");printf("tt删除文件n"); printf("t* * * * * * * * * * * * * * * *n");printf("n输入用户名:n");scanf("%s",username);i=findusername(username);/*返回用户名下标*/if(i>=num)/找不到该用户printf("用户不存在!n删除失败!");return ;elseprintf("n输入文件名:"
47、);scanf("%s",filename);p1=p2=filesystemi.link;/用户的第一个文件while(p2&&strcmp(p2->filename,filename)p1=p2;p2=p2->nextfile;if(!p2)/该用户名下没有文件或不存在指定文件printf("n文件不存在!n删除失败!n");else printf("是否删除文件%s?(y/n)",p2->filename); cscanf("%c",&cy); if(cy='
48、y')if(p1=p2)filesystemi.link=p1->nextfile; elsep1->nextfile=p2->nextfile;free(p2);printf("n文件已删除!n");elsereturn;void deletefolder()/*删除文件夹*/int i;char cy;char username10;char foldername10;UDD *p1,*p2;system("cls");/*清屏*/printf("t* * * * * * * * * * * * * * * *n&
49、quot;);printf("tt删除文件夹n"); printf("t* * * * * * * * * * * * * * * *n");printf("n输入用户名:n");scanf("%s",username);i=findusername(username);/*返回用户名下标*/if(i>=num)printf("用户不存在!n删除失败!");return ;elseprintf("n输入文件夹名:");scanf("%s",folde
50、rname);p1=p2=filesystemi.clink;while(p2&&strcmp(p2->foldername,foldername)p1=p2;p2=p2->link;if(!p2)printf("n文件夹不存在!n删除失败!n");else printf("是否删除文件夹%s及文件夹%s下所有东西?(y/n)",p2->foldername,p2->foldername); cscanf("%c",&cy); if(cy='y')if(p1=p2)fil
51、esystemi.clink=p1->link; elsep1->link=p2->link;free(p2);printf("n文件夹已删除!n");elsereturn;AFD * openfile()/*打开文件*/char username10;char filename10;int i;char ch;sfile *k;UFD *p=NULL;system("cls");/*清屏*/switch(choice)case 1:printf("t* * * * * * * * * * * * * * * *n"
52、); printf("tt读文件n"); printf("t* * * * * * * * * * * * * * * *n");break;case 2:printf("t* * * * * * * * * * * * * * * *n"); printf("tt写文件n"); printf("t* * * * * * * * * * * * * * * *n");break;case 3:printf("t* * * * * * * * * * * * * * * *n"
53、); printf("tt执行文件n"); printf("t* * * * * * * * * * * * * * * *n");break;case 4:printf("t* * * * * * * * * * * * * * * *n"); printf("tt打开文件n"); printf("t* * * * * * * * * * * * * * * *n");break;printf("输入登录的用户名:");scanf("%s",userna
54、me);i=findusername(username);/*返回用户名下标*/if(i>=num)/*用户不存在*/printf("n用户不存在!n不能打开文件!n");return NULL;else/*用户存在*/printf("输入文件名:");scanf("%s",filename);p=findfilename(filename,filesystemi.link);if(!p)/*用户文件不存在*/printf("n该用户没有创建指定文件!");k=(sfile*)malloc(sizeof(sfile);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 3.13 异域的憧憬-美术交流与美术作品的关系 教学设计高中美术湘美版(2019)美术鉴赏
- 房地产营销策划 -常德棚改项目定位及策略建议
- 《无人机无人船协同海洋测绘作业规程》(征求意见稿)
- 2025届高考语文复习:诗歌赏析技巧-如何读懂诗歌+课件
- 详解保育猪饲养存在的问题及管理技术
- 3个人开店入股协议书范文范本
- 【课件】质量+课件人教版物理八年级上学期
- 3.1 列代数式和代数式的值-2024-2025学年七年级数学上册《知识解读题型专练》(北师大版2024新教材)
- 新入职工入职安全培训试题附参考答案【培优】
- 工厂车间安全培训试题含答案(轻巧夺冠)
- 疾控中心实验室内审检查表
- 监理单位法定代表人及项目负责人安全生产承诺书
- 银行职工代表大会提案100例范文五篇
- 办公楼装修施工管理组织机构
- ArcGIS数据脱密处理的技术
- 从伦敦镍期货事件看中外交易所风险防控差异
- 一年级下册语文课件-经典诵读-小猪唏哩呼噜 (共20张PPT)部编版
- 四年级上册美术课件-第15课 瓶瓶罐罐 丨赣美版 (16张PPT)
- 数字乡村建设方案
- 设计文件签收表(一)
- 2020大学生烘焙店创业计划书5篇
评论
0/150
提交评论