操作系统课程设计

if(strcmp(ufd->filename,buffer)==0) { //在当前用户注册目录下 //找到该文件,返回真值 fclose(fp);return true; } } } }

//------------------------------------------------------------------------------------------------ bool WriteRight(int len,bool BOOL)//查看是否已经正确地写入到该文件信息中 //是则返回真值 { char user[50],outfile[50]; FILE *fp,*fp1; //定义文件 strcpy(user,elseuser->username); //拷贝用户名到数组 strcat(user,\ //扩展名.exe if((fp=fopen(user,\判断文件是否为空 { // fclose(fp); return false; //返回 } else{ UFD *ufd = getspace(UFD); //申请空间 while(1){ //在此用户目录下查找匹配文件 fread(ufd,sizeof(UFD),1,fp); //读取文件 if(feof(fp)) //判断是否有文件 { fclose(fp); //关闭文件 return false; } if((strcmp(ufd->filename,buffer))==0) //比较文件 { //找到要写入新的长度的文件 strcpy(outfile,\ //扩展名.exe if((fp1=fopen(outfile,\ //打开文件是否为空 { cout<<\错误:写入文件长度出错_3。\ // fclose(fp1); fclose(fp); //关闭文件 return false; } else{ fclose(fp);

fp=fopen(user,\

//文件指针从新指向此用户文件信息管理模 //块开头

while(1){ fread(ufd,sizeof(UFD),1,fp); //读文件 if(feof(fp)) //判断是否有文件 break; if(strcmp(ufd->filename,buffer)==0) //对文件进行比较 { //找到匹配的文件 if(BOOL) ufd->length+=len; //在文件末追加内容的操作 else ufd->length =len; //覆盖原文件内容 } fwrite(ufd,sizeof(UFD),1,fp1); //写文件 } fclose(fp);fclose(fp1); //关闭文件 remove(user); //移除 rename(outfile,user); //重命名 return true; } } } } }

//------------------------------------------------------------------------------------------------ void WriteLengthToFile(int Len,bool BOOL)//将文件长度写入文件管理模块中 {//因为当前用户可以对其它用户的文件进行操作(只要权限允许) //所以应该在整个文件系统目录下查找该文件的位置 FILE *fp; if((fp=fopen(\ //不能打开文件 cout<<\写入文件长度错误_1!\ // fclose(fp); return; } else{ elseuser = getspace(MFD); //申请空间 while(1){ fread(elseuser,sizeof(MFD),1,fp); //读文件 if(feof(fp)) //判断是否可读 break; else{ if(WriteRight(Len,BOOL)){ //查看是否已经正确地写入到该文件信息中 fclose(fp);return; } }

} cout<<\写入文件长度错误_2!\ fclose(fp);return; } }

//------------------------------------------------------------------------------------------------ void WriteFile()//向文件写入信息的操作 { if(!QueryMod(true)) //查询当前用户对该文件是否有写权 return; //对该文件没有写权则返回 char ch; int i=0; FILE *fp; if((fp=fopen(buffer,\//查询该文件是否存在 { cout<<\该文件不存在,请创建该文件后再写入。\ //显示 // fclose(fp); return; } fclose(fp); //关闭文件 cout<<\请选择写入方式:\ cout<<\ 1、覆盖原文件 2、在原文件末尾写入 3、取消\ cin>>ch; //选择写入方式 cout<<\开始输入正文:\ switch(ch) { case '1'://覆盖原文件 if((fp=fopen(buffer,\ //打开文件是否为空 cout<<\文件打开失败。\ else { ch=getchar(); while(ch!='#') //将新的文件内容写入到文件的磁盘位置中 { i++; fputc(ch,fp); //按字符写入 ch=getchar(); } } fclose(fp); //关闭文件 WriteLengthToFile(i,false); //将文件长度写入文件管理模块 break;

case '2': //在原文件末尾写入 if((fp=fopen(buffer,\ //打开文件是否为空 cout<<\文件打开失败。\ else { ch=getchar(); while(ch!='#') //将新的文件内容写入到文件的磁盘位置中 { i++; fputc(ch,fp); //按字符写入 ch=getchar(); } } fclose(fp); WriteLengthToFile(i,true); //将文件长度写入文件管理模块 break; default: //取消 break; } }

//------------------------------------------------------------------------------------------------ void ReadFile()//读文件函数 { if(!QueryMod(false)) //查询当前用户是否有权读该文件 return; //没有读取权限,则返回 FILE *fp; if((fp=fopen(buffer,\打开该文件 { cout<

//------------------------------------------------------------------------------------------------ void ChangeMod()//修改某文件的执行权限 { int mod=40; //定义变量mod=40 FILE *fp,*infile,*outfile; //定义文件 char in[50],out[50]; UFD *ufd = getspace(UFD); //申请空间 strcpy(in,curuser->username); //拷贝用户名到数组 strcat(in,\ //添加扩展名.exe strcpy(out,\ //拷贝文件到数组 if((fp=fopen(in,\ //打开文件看是否为空 { // fclose(fp); cout<<\操作出现错误,对此我们表示歉意!\ } else{ while(1) { //查看该文件是否在当前用户的注册目录下 //任何用户无权修改不是自己目录下的文件的权限值 fread(ufd,sizeof(UFD),1,fp); //读取文件 if(feof(fp)) //判断权限 { //在当前目录下找不到该文件,说明该用户无权修改该文件权限 cout<<\你没有权限对文件 \执行该操作!\ fclose(fp);return; } if(strcmp(ufd->filename,buffer)==0) //比较是否是此文件 { //找到该文件,继续操作 fclose(fp);break; } } } bool flag1=true; //置旗为true while(flag1) { cout<<\输入文件 \的新的权限值:\ cin>>mod; //输入权限值 if(mod<30 || mod>33) {//确保输入的权限值正确 cout<<\错误:权限值必须在30~33之间\ continue; } else{

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4