资源简介
采用一级目录结构实现磁盘文件操作。包括创建文件,打开文件,读写文件,删除文件等命令
代码片段和文件信息
#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 制作简易的图书管理系统
评论
共有 条评论