資源簡介
采用一級目錄結構實現磁盤文件操作。包括創建文件,打開文件,讀寫文件,刪除文件等命令
代碼片段和文件信息
#include
#include
#include
using?namespace?std;
//WJH:?保護/操作方式
#define?READ?1?????//WJH:?可讀/讀文件
#define?WRITE?2????//WJH:?可寫/寫文件
#define?RWE?3??????//WJH:?可讀可寫可執行/執行文件
//WJH:?文件狀態
#define?NEW?1????//WJH:新建
#define?OPEN?2???//WJH:打開
#define?CLOSE?3??//WJH:關閉
//WJH:?用戶文件目錄結構
typedef?struct?ufd??
{
char?fileName[100];??//WJH:?文件名
int?protectType;?????//WJH:?文件保護方式READ表示文件可讀WRITE表示文件可寫RWE表示文件可讀寫執行
int?fileMaxLength;???//WJH:?文件最大長度
int?fileCurLength;???//WJH:?文件當前長度
int?fileAddress;?????//WJH:?文件所在地址
//int?descriptor;????//WJH:?文件描述符
struct?ufd?*nextFile;//WJH:?指向下一個文件
}UFDNODE;
//WJH:?用戶打開文件表結構
typedef?struct?uof
{
char?fileName[100];???//WJH:?文件名
int?operateType;??????//WJH:?操作方式1代表讀文件2代表寫文件3代表執行文件
int?pRead;????????????//WJH:?讀指針
int?pWrite;???????????//WJH:?寫指針
int?fileCurLength;????//WJH:?文件當前長度
int?fileMaxLength;????//WJH:?文件最大長度
int?fileStatus;???????//WJH:?文件狀態NEW為新建,OPEN為打開,CLOSE為關閉
//int?descriptor;?????//WJH:?文件描述符
struct?uof?*nextOpen;?//WJH:?指向下一個打開文件
}UOFNODE;
UFDNODE?*?UFDList?=?(UFDNODE*)malloc(sizeof(UFDNODE));????//WJH:?用戶文件目錄表
UOFNODE?*?UOFList?=?(UOFNODE*)malloc(sizeof(UOFNODE));????//WJH:?用戶打開文件表
int?C?=?0;?????//WJH:?當前打開文件數計數器
int?C1?=?10;???//WJH:?磁盤使用情況計數器
//int?C2?=?0;????//WJH:?描述符計數器
char?Disk[1024][64];??//WJH:?模擬磁盤,總大小為64KB
char?disk[128];???????//WJH:?磁盤位示圖
void?Initialize();????????????????//WJH:?初始化
void?PrintMenu();?????????????????//WJH:?打印命令菜單
int?CheckUFDExist(string?name);???//WJH:?檢查文件是否已經存在
int?CheckUOFExist(string?name);???//WJH:?檢查文件是否已經打開
int?Create(?char?_CMD[]?);????????//WJH:?新建文件命令
int?Open(?char?_CMD[]?);??????????//WJH:?打開文件命令
int?Close(?char?_CMD[]?);?????????//WJH:?關閉文件命令
int?Write(?char?_CMD[]?);?????????//WJH:?寫文件命令
int?Read(?char?_CMD[]?);??????????//WJH:?讀文件命令
int?Delete(?char?_CMD[]?);????????//WJH:?刪除文件命令
//*******************************************************************************
//WJH:?主函數
int?main()
{
char?CMD[100];???//WJH:?保存命令
int?fd;??????????//WJH:?文件描述符
string?_CMD;
Initialize();
while(1)
{ ????
printf(“請輸入您要執行的命令:\n“);
scanf(“%s“&CMD);
getchar();
switch(?CMD[0]?)
{
case?‘o‘:
case?‘O‘:
fd?=?Open(?CMD?);
if(?fd!=-1?)
printf(“文件描述符fd?=?%d\n\n“fd);
break;
case?‘r‘:
case?‘R‘:
Read(?CMD?);
break;
case?‘w‘:
case?‘W‘:
Write(?CMD?);
break;
case?‘d‘:
case?‘D‘:
Delete(?CMD?);
break;
case?‘c‘:
case?‘C‘:
_CMD?=?CMD;
if(?_CMD.length()?>?6?&&?_CMD.substr(07)?==?“create(“)
{
fd?=?Create(?CMD?);
if(?fd?!=?-1)
printf(“文件描述符fd?=?%d\n\n“fd);
}
else?if(?_CMD.length()?>?5?&&?_CMD.substr(06)?==?“close(“)
{
Close(?CMD?);
}
else
{
printf(“輸入命令有誤,請重新輸入(需要幫助請輸入help)\n\n“);
}
break;
case?‘h‘:
case?‘H‘:
PrintMenu();
break;
case?‘q‘:
case?‘Q‘:
return?0;
break;
default:
- 上一篇:C++ 實現的 LISP 編譯器
- 下一篇:qt+mysql 制作簡易的圖書管理系統
評論
共有 條評論