模拟unix文件系统代码(8)

2025-07-16

}

}

}

for( j=0; j

strcpy(direct[i]->fileName,filename); //设置文件名称 direct[i]->parentID=currentDirID; //设置文件父节点号 inode[j]->fileAssociated=0; inode[j]->fileGroup=0; inode[j]->fileLength=0;

//设置i节点文件关联数 //设置文件组 //设置文件长度 //设置文件权限 //设置文件拥有者 //设置文件类型 //设置文件时间

if(superblock->freeINode[j]==0) {//第j个i节点空闲 }

direct[i]->directoryID=j; //文件目录使用该i节点 superblock->freeINode[j]=1; //第j个i节点被占用 break;

inode[j]->fileAssociated=1; inode[j]->fileMod=defaultMask; strcpy(inode[j]->fileOwner,owner); inode[j]->fileStyle=style; time(&inode[j]->modifyTime); //当前文件长度加 if(currentDirID!=-1) { }

return i; //返回新创建文件号

inode[direct[currentDirID]->directoryID]->fileLength++; cout<<\; //保存信息 writeDisk();

return -1;

//创建新目录

int makeDirectory(int currentDirID, int currentuserID,int style) {

//读入文件名 cout<<\; string name; cin>>name;

char fileName[256]; int i;

}

for(i=0; i

fileName[i]=name[i]; fileName[i]='\\0'; //获取用户名 char fileOwner[10];

strcpy(fileOwner,users[currentuserID]->userName); //创建目录

currentDirID=createDirectory(fileName,currentDirID,style,fileOwner); //保存信息 writeDisk();

return currentDirID;

//显示当前目录

void currentDir(int currentDirID) { }

//改变当前路径

int changeDirectory(int currentDirID, int currentuserID) {

//输入二级命令 cout<<\; string nextCommand; cin>>nextCommand; //如果是往上一层目录 list dir;

while(currentDirID!=-1 && direct[currentDirID]->parentID!=-1) { }

//把根节点的文件名存入链表

dir.push_front(direct[currentDirID]->fileName); dir.push_front(\); //遍历链表,输出当前路径

list::iterator dirIterator;

for(dirIterator=dir.begin(); dirIterator!=dir.end(); dirIterator++)

cout<<(*dirIterator); cout<<\;

//把当前节点的文件名存入链表

dir.push_front(direct[currentDirID]->fileName); dir.push_front(\);

currentDirID=direct[currentDirID]->parentID;

}

if(nextCommand==\) { } else

{//如果是往下一层目录 }

return currentDirID;

for(int i=0; i

cout<<\<

string fileName=direct[i]->fileName;

//如果找到文件,返回文件号,否则提示找不到该文件

if(nextCommand==fileName && inode[direct[i]->directoryID]->fileStyle==0

&& direct[i]->parentID==currentDirID) return i;

if(direct[currentDirID]->parentID!=-1) { }

//已处于根目录,不能往上一层

cout<<\; return currentDirID;

currentDirID=direct[currentDirID]->parentID; else

//删除目录

void removeDirectory(int currentDirID) {

//判断当前文件目录下是否存在要删除的目录 bool flag=false; int dirNum=-1,i=0;

for(i=0; i

string fileName=direct[i]->fileName;

if(direct[i]->parentID==currentDirID && fileName==name) {

dirNum=i;

//输入要删除的文件目录名 cout<<\; string name; cin>>name;

}

}

flag=true; break;

if(flag)

{//在要删除的目录在当前目录下 }

//判断在要删除的目录下是否存在子文件 bool ifContain=false;

for(i=0; i

if(ifContain)

cout<<\; else

{//要删除的目录下不存在子文件,给与删除 }

cout<<\;

int deleteiNodeNum=direct[dirNum]->directoryID; //回收目录项

strcpy(direct[dirNum]->fileName,\); direct[dirNum]->directoryID=-1; direct[dirNum]->parentID=-1; //回收i节点 for(i=0; i<13; i++)

//超级块中空闲i节点增加一个

superblock->freeINode[deleteiNodeNum]=0; //当前文件目录下文件数减

inode[direct[currentDirID]->directoryID]->fileLength++; //保存信息 writeDisk();

cout<<\;

inode[deleteiNodeNum]->fileAddress[i]=-1; inode[deleteiNodeNum]->fileLength=-1; if(direct[i]->parentID==dirNum) { }

ifContain=true; break;

else

}

//更改文件名

void changeFileName(int currentDirID) {

//判断当前文件目录下是否存在要更改文件名的文件 bool flag=false; int dirNum=-1,i=0;

for(i=0; i

cout<<\<

strcpy(direct[dirNum]->fileName,fileNewName); cout<<\; //保存信息 writeDisk();

string fileName=direct[i]->fileName;

if(direct[i]->parentID==currentDirID && fileName==name) { }

dirNum=i; flag=true; break;

//输入文件的新名 cout<<\; string newName; cin>>newName;

char fileNewName[256]; int j;

for(j=0; j

fileNewName[j]=newName[j]; fileNewName[j]='\\0'; //输入要修改文件名的文件名称 cout<<\; string name; cin>>name;


模拟unix文件系统代码(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:县人民政府机构改革动员会_主持词

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219