多用户多级目录文件系统的实现-操作系统 第4页
void Read(char *path)
{
char display[BLOCK_SIZE];
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)
{
FSElement *fselem = (FSElement *)
FindBlankFileBlock(FS.FI.FIStart[i].FileBlockId);
if (fselem->fileStu == closed)
{
strcpy(display, "文件尚未打开,请先打开文件。\n");
}
else
{
if (!fselem->FileData || !strcmp(fselem->FileData, ""))
{
strcpy(display, "文件无内容。\n");
}
else
{
strcpy(display, fselem->FileData);
}
fselem->fileStu = reading;
}
break;
}
}
if (strcmp(display, "") == 0)
{
strcpy(display, "当前目录下没有您要打开的文件。\n");
}
printf("%s\n", display);
printf("[%s@localhost %s]$", CS.CurrentUser.UserName, CS.CurrentPath);
}
4.1.6文件的写:write
只支持在当前目录进行操作,前提是用户已执行文件打开的命令,否则会提示用户先打开文件。命令成功后,会等待用户的输入,用户输入完毕,使用CTRL+D,结束输入,系统会读入用户的输入内容,保存到相应的文件块(注意,如果用户的输入太多,会出现越界或截取用户输入一部分的现象)。
void Write(char *path)
{
char display[BLOCK_SIZE];
memset(display, '\0', BLOCK_SIZE);
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)
{
FSElement *fselem = (FSElement *)
FindBlankFileBlock(FS.FI.FIStart[i].FileBlockId);
if (fselem->fileStu == closed)
{
strcpy(display, "文件尚未打开,请先打开文件。\n");
}
else
{
printf("\n注意:文件最大不可以超过 %d 字节!!按CTRL+D结
束编辑。\n", BLOCK_SIZE - sizeof(FSElement));
char c;
int i = 0;
while ((c = getchar()) != 0x04)
{
display[i++] = c;
}
getchar(); //处理回车
display[i] = '\0';
strcpy(fselem->FileData, display);
unsigned len=strlen(display)<BLOCK_SIZE - sizeof(FSElement)
? strlen(display) : BLOCK_SIZE - sizeof(FSElement);
strncpy(fselem->FileData, display, len);
fselem->fileStu = writing;
strcpy(display, "文件写入成功。\n");
}
break;
}
}
printf("%s\n", display);
printf("[%s@localhost %s]$", CS.CurrentUser.UserName, CS.CurrentPath);
}
4.1.7文件关闭:close
只支持在当前目录进行操作,通过用户给定的文件名在文件索引中搜索到文件的物理文件块ID,找到该文件元素后,将文件当前状态置为关闭。
void Close(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)
{
FSElement *fselem = (FSElement *)
FindBlankFileBlock(FS.FI.FIStart[i].FileBlockId);
fselem->fileStu = opened;
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.8删除文件:delete
删除文件并不真正清理文件的物理存储内容,只是将文件的有效状态更改为无效。
上一页 [1] [2] [3] [4] [5] [6] 下一页
多用户多级目录文件系统的实现-操作系统 第4页下载如图片无法显示或论文不完整,请联系qq752018766