多用户多级目录文件系统的实现-操作系统 第5页
void Delete(char *path)
{
char display[100] = "";
for (unsigned i = 0; i < FS.FI.FICount; i++)
{
if (!strcmp(FS.FI.FIStart[i].ParentName, CS.CurrParent->FileName)
&& FS.FI.FIStart[i].FileLevel == CS.FileLevel
&& FS.FI.FIStart[i].effect == 1
&& strcmp(FS.FI.FIStart[i].FileName, path) == 0)
{
FS.FI.FIStart[i].effect = 0; //删除标记
strcpy(display, "文件已删除。\n");
break;
}
}
if (strcmp(display, "") == 0)
{
strcpy(display, "当前目录下没有您要删除的文件。\n");
}
printf("%s\n", display);
printf("[%s@localhost %s]$", CS.CurrentUser.UserName, CS.CurrentPath);
}
4.1.9创建目录(建立子目录):mkdir
只支持在当前目录创建文件,与创建文件有点类似,只是文件夹在文件元素结构中的数据部分为空。同样会更新位示图和文件索引。
创建目录流程图
void Mkdir(char *filename)
{
if (strcmp(filename, "") == 0)
{
printf("对不起,文件夹名不能为空。\n");
}
else
{
CreateFileElement(protect, filename, dir, NULL, CS.CurrParent);
}
printf("[%s@localhost %s]$", CS.CurrentUser.UserName, CS.CurrentPath);
}
4.1.10改变当前目录:cd
只支持进入下一层的一个文件夹和回到父目录,实现方式为通过系统的当前状态,获取一个指向目标文件夹的指针做为当前的父节点,改变当前的路径为目标路径,改变用户当前所在层。
改变当前目录流程图
void Cd(char *path)
{
int splitDisplayCou = 0; //分割符出现的次数
if(strcmp(path, "..") == 0) //返回上一级目录,即父目录
{
if (CS.FileLevel > 0)
{
CS.FileLevel--;
CS.CurrParent = CS.CurrParent->parent;
for (unsigned i = strlen(CS.CurrentPath) - 1; i > 0; i--)
{
if (CS.CurrentPath[i] == '/')
{
splitDisplayCou++;
if (splitDisplayCou == 2) //已过滤掉最后一个目录名
{
break;
}
}
}
char temppath[1000] ;
strcpy(temppath, CS.CurrentPath);
memset(CS.CurrentPath, '\0', 1000);
strncpy(CS.CurrentPath, temppath, i+1);
}
}
else
{
char display[100] = "";
for (unsigned i = 0; i < FS.FI.FICount; i++)
{
if(!strcmp(FS.FI.FIStart[i].ParentName, CS.CurrParent->FileName)
&& FS.FI.FIStart[i].FileLevel == CS.FileLevel
&& FS.FI.FIStart[i].effect == 1
&& strcmp(FS.FI.FIStart[i].FileName, path) == 0)
{
strcpy(display, "文件存在。\n");
CS.CurrParent = (FSElement *)
FindBlankFileBlock(FS.FI.FIStart[i].FileBlockId);
CS.FileLevel++;
strcat(CS.CurrentPath, path);
strcat(CS.CurrentPath, "/");
break;
}
}
if (strcmp(display, "") == 0) //文件夹不存在,什么都不做
{
printf("当前目录下没有您要进入的文件夹。\n");
}
}
printf("[%s@localhost %s]$", CS.CurrentUser.UserName, CS.CurrentPath);
}
4.1.11列出文件目录:dir
只支持在当前目录进行操作,根据文件元素的名称+文件元素所在层+父节点可以唯一的标识一个文件元素的关系在文件索引中搜索出当前层的所有文件元素。
void Dir(char *path)
{
char display[1000];
上一页 [1] [2] [3] [4] [5] [6] 下一页