📄 test2.cpp
字号:
if(strcmp(iuser[cuser]->u_name,"root")!=0)
{
cout<<"ONLY THE ROOT CAN DELETE USER\n";
return OK;
}else
{
//在用户系统中删除
for(int xx=0;xx<userno;xx++)
{
if(iuser[xx]!=NULL)
{
if(strcmp(iuser[xx]->u_name,u_name)==0)
{
int temp=cuser;
cuser=xx;
logout();
cuser=temp;
break;
}
}
}
//在uwords中删除
ofile *curfile;
curfile=iopenfile.openf(rdir->o_fcb,"uwords",IFREG|IREAD|GREAD|OREAD);
char*base=new char[curfile->o_fcb->f_fsize+1];
iopenfile.readf(curfile->o_fcb,0,curfile->o_fcb->f_fsize,base);
char name[12];
for(int c=0;c<=(curfile->o_fcb->f_fsize-1)/26;c++)
{
for(int i=0;i<12;i++)
{
name[i]=base[26*c+i];
}
if(strcmp(name,u_name)==0)
{
for(int jj=(c+1)*26;jj<=curfile->o_fcb->f_fsize-1;jj++)
{
base[jj-26]=base[jj];
}
iopenfile.writef(curfile->o_fcb,0,curfile->o_fcb->f_fsize-26,base);
iopenfile.closef(curfile);
delete[]base;
iopenfile.closef(curfile);
return OK;
}
}
iopenfile.closef(curfile);
delete[]base;
return OK;
}
}
//更改当前用户密码
int use::changepw(char*password)
{
strcpy(iuser[cuser]->u_password,password);
iuser[cuser]->u_flag=UCHG;
return OK;
}
int use::create(char*name)
{
if(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb->f_mode>=IFREG)
{
cout<<"Please close the file first\n";
return OK;
}
ofile *curfile;
curfile=iopenfile.openf(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb,name,IFREG,1);
if(curfile!=NULL)
{
//文件存在,则返回
iopenfile.closef(curfile);
cout<<"THERE HAS BEEN THE FILE "<<name<<endl;
return OK;
}else
{
//不存在则创建
curfile=iopenfile.openf(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb,name,MODE);
curfile->o_fcb->f_uid=iuser[cuser]->u_uid;
curfile->o_fcb->f_gid=iuser[cuser]->u_gid;
iopenfile.closef(curfile);
return OK;
}
}
int use::del(char*name)
{
ofile *curfile;
curfile=iopenfile.openf(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb,name,IFREG,1);
if(curfile==NULL)
{
//文件不存在则,返回
cout<<"CANNOT FIND THE FILE "<<name<<endl;
return OK;
}else
{
//存在,则调用openfile的deletef删除文件
if(curfile->o_fcb->f_uid=='a')
{
cout<<"this file is system file!you cannot delete!\n";
iopenfile.closef(curfile);
return OK;
}
if(curfile->o_fcb->f_uid!=iuser[cuser]->u_uid&&iuser[cuser]->u_uid!='A')
{
iopenfile.closef(curfile);
cout<<"YOU CANNOT DELETE THIS FILE\n";
return OK;
}
if(iopenfile.deletef(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir],curfile)==-1)
{
iopenfile.closef(curfile);
}
return OK;
}
}
int use::open(char*name)
{
ofile *curfile;
curfile=iopenfile.openf(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb,name,IFREG,1);
if(curfile==NULL)
{
//不存在,则返回
cout<<"CANNOT FIND THE FILE "<<name<<endl;
return OK;
}
//存在打开
return OK;
}
//关闭当前工作文件
int use::close(char*name)
{
ofile *curfile; curfile=iopenfile.openf(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb,name,IFREG,0,1);
if(curfile==NULL)
{
cout<<"maybe this file has not been opened or there is not the file"<<endl;
return OK;
}
iopenfile.closef(curfile);
iopenfile.closef(curfile);
return OK;
}
//读文件信息
int use::read(char*name)
{
ofile *curfile; curfile=iopenfile.openf(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb,name,IFREG,0,1);
if(curfile==NULL)
{
cout<<"maybe this file has not been opened or there is not the file"<<endl;
return OK;
}
iopenfile.closef(curfile);
if(curfile->o_fcb->f_gid!=iuser[cuser]->u_gid&&iuser[cuser]->u_uid!='A')
{
cout<<"YOU CANNOT READ THIS FILE\n";
return OK;
}
if(curfile->o_fcb->f_fsize==0)
{
return OK;
}
char*base=new char[curfile->o_fcb->f_fsize+1];
iopenfile.readf(curfile->o_fcb,0,curfile->o_fcb->f_fsize,base);
char*buf=new char[curfile->o_fcb->f_fsize+1];
int t=0;
for(int u=0;u<curfile->o_fcb->f_fsize+1;u++)
{
buf[t]=base[u];
t++;
if(base[u]=='\0')
{
cout<<buf<<endl;
t=0;
}
}
if(t!=0)
{
buf[t]='\0';
cout<<buf<<endl;
}
delete[]base;
delete[]buf;
}
//写文件,带参数-e和-b
int use::write(char*name)
{
ofile *curfile; curfile=iopenfile.openf(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb,name,IFREG,0,1);
if(curfile==NULL)
{
cout<<"maybe this file has not been opened or there is not the file"<<endl;
return OK;
}
iopenfile.closef(curfile);
if(curfile->o_fcb->f_uid=='a')
{
cout<<"this file is system file! you cannot write!"<<endl;
return OK;
}
if(curfile->o_fcb->f_uid!=iuser[cuser]->u_uid&&iuser[cuser]->u_uid!='A')
{
cout<<"YOU CANNOT WRITE THIS FILE\n";
return OK;
}
char*base=new char[100];
cout<<"#";
cin.getline(base,100);
iopenfile.writef(curfile->o_fcb,0,strlen(base),base);
delete[]base;
return OK;
}
//读目录信息,列文件
int use::dir()
{
if(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb->f_mode>=IFREG)
{
cout<<"Please close the file first\n";
return OK;
}if(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb->f_fsize==0||iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb->f_mode>=IFREG)
return OK;
char*base=new char[iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb->f_fsize+1]; iopenfile.readf(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb,0,iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb->f_fsize,base);
char name[8];
int f_mode;
int f_fsize;
for(int d=0;d<=(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb->f_fsize-1)/dsize;d++)
{
for(int s=0;s<8;s++)
{
name[s]=base[d*dsize+8+s];
}
f_mode=int((unsigned char)base[d*dsize])*256+int((unsigned char)base[d*dsize+1]);
f_fsize=int((unsigned char)base[d*dsize+4])*16777216+int((unsigned char)base[d*dsize+5])*65537+int((unsigned char)base[d*dsize+6])*256+int((unsigned char)base[d*dsize+7]);
cout<<setiosflags(ios::left);
cout<<setw(20)<<name;
cout<<setiosflags(ios::left);
if(f_mode==IFDIR)
{
cout<<setw(20)<<"DIR"<<f_fsize/dsize<<" items\n";
}else
{
cout<<setw(20)<<"FILE"<<f_fsize<<" bytes\n";
}
}
delete[]base;
return OK;
}
int use::makedir(char*name)
{
if(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb->f_mode>=IFREG)
{
cout<<"Please close the file first\n";
return OK;
}
ofile *curfile;
curfile=iopenfile.openf(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb,name,IFDIR,1);
if(curfile!=NULL)
{
//存在,则返回
iopenfile.closef(curfile);
cout<<"THERE HAS BEEN A FOLDER "<<name<<endl;
return OK;
}else
{
//不存在,创建
curfile=iopenfile.openf(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb,name,IFDIR);
curfile->o_fcb->f_uid=iuser[cuser]->u_uid;
curfile->o_fcb->f_gid=iuser[cuser]->u_gid;
iopenfile.closef(curfile);
return OK;
}
}
int use::removedir(char*name)
{
ofile *curfile;
curfile=iopenfile.openf(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb,name,IFDIR,1);
if(curfile==NULL)
{
//不存在,则返回
cout<<"CANNOT FIND THE FOLDER "<<name<<endl;
return OK;
}else
{
//存在删除
if(curfile->o_fcb->f_uid!=iuser[cuser]->u_uid&&iuser[cuser]->u_uid!='A')
{
cout<<"you cannot remove this dir\n";
iopenfile.closef(curfile);
return OK;
}
if(iopenfile.deletef(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir],curfile)==-1)
{
iopenfile.closef(curfile);
}
return OK;
}
}
int use::cdir(char*name)
{
if(strcmp(name,"..")==0)
{
if(iuser[cuser]->u_cdir==0)
{
return OK;
}else
{
iopenfile.closef(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]);
iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]=NULL;
iuser[cuser]->u_cdir--;
return OK;
}
}
ofile *curfile;
curfile=iopenfile.openf(iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb,name,IFDIR,1);
if(curfile==NULL)
{
cout<<"CANNOT FIND THE FOLDER "<<name<<endl;
return OK;
}else
{
if(iuser[cuser]->u_cdir==15)
{
return OK;
}else
{
iuser[cuser]->u_cdir++;
iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]=curfile;
}
}
}
void use::entrance()
{
char buf[50];
char temp[10];
char order[10];
char A[15];
char B[15];
for(;;)
{
buf[0]='\0';
temp[0]='\0';
order[0]='\0';
A[0]='\0';
B[0]='\0';
if(cuser==-1) //系统无用户工作时
{
cout<<"login:";
cin.getline(A,15);
if(strcmp(A,"shutdown")==0)
break;
cout<<"password:";
cin.getline(B,15);
login(A,B);
}else
{
//系统有用户登陆时,命令的接受以及分析
cout<<"["<<iuser[cuser]->u_name<<"@localhost "<<iuser[cuser]->u_ofile[iuser[cuser]->u_cdir]->o_fcb->f_name<<"]#";
cin.getline(buf,50);
int t=-1;
int k=0;
for(int i=0;i<50;i++)
{
if(buf[i]==' '||buf[i]=='\0')
{
if(t==-1)
continue;
else
{
if(t==0)
{
temp[k]='\0';
strcpy(order,temp);
t++;
if(buf[i]=='\0')
break;
}else
{
if(t!=2)
continue;
else
{
if(t==2)
{
temp[k]='\0';
strcpy(A,temp);
break;
}
}
}
}
k=0;
}else
{
if(t==-1)
t++;
else
if(t==1)
t++;
temp[k]=buf[i];
k++;
}
}
if(strcmp(order,"login")==0||strcmp(order,"logout")==0||strcmp(order,"cu")==0||strcmp(order,"du")==0||strcmp(order,"pw")==0||strcmp(order,"create")==0||strcmp(order,"delete")==0||strcmp(order,"open")==0||strcmp(order,"close")==0||strcmp(order,"read")==0||strcmp(order,"write")==0||strcmp(order,"dir")==0||strcmp(order,"md")==0||strcmp(order,"rd")==0||strcmp(order,"cd")==0)
{
if(strcmp(order,"login")==0)
{
cout<<"password:";
cin.getline(B,15);
login(A,B);
}
if(strcmp(order,"logout")==0)
{
logout();
}
if(strcmp(order,"cu")==0)
{
if(strcmp(iuser[cuser]->u_name,"root")!=0)
{
cout<<"ONLY THE ROOT CAN CREATE USER\n";
}else
{
if(strcmp(A,"root")==0)
{
cout<<"CHANGE A NAME\n";
}else
{
cout<<"password:";
cin.getline(B,15);
createuser(A,B);
}
}
}
if(strcmp(order,"du")==0)
{
if(strcmp(iuser[cuser]->u_name,"root")!=0)
{
cout<<"ONLY THE ROOT CAN CREATE USER\n";
}else
{
if(strcmp(A,"root")==0)
{
cout<<"CHANGE A NAME\n";
}else
deleteuser(A);
}
}
if(strcmp(order,"pw")==0)
changepw(A);
if(strcmp(order,"create")==0)
create(A);
if(strcmp(order,"delete")==0)
del(A);
if(strcmp(order,"open")==0)
open(A);
if(strcmp(order,"close")==0)
close(A);
if(strcmp(order,"read")==0)
read(A);
if(strcmp(order,"write")==0)
write(A);
if(strcmp(order,"dir")==0)
dir();
if(strcmp(order,"md")==0)
makedir(A);
if(strcmp(order,"rd")==0)
removedir(A);
if(strcmp(order,"cd")==0)
cdir(A);
}else
cout<<"BAD COMMAND\n";
}
}
}
int vp=open("myfile",O_RDWR,S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH);
int main()
{
class use userA;
userA.entrance();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -