• 大小: 43KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: C/C++
  • 标签: Linux/Unix  文件系统  C  

资源简介

用C编写的一个Unix/Linux文件系统

资源截图

代码片段和文件信息

#include 
#include 
#include  
#include  

struct command //命令行

char com[10];
}cmd[22]; 

struct user //系统用户组
{
int userid;
char username[10];
char password[10];
int groupid;
}users[8];

struct block //块信息

int a; // 模拟盘块是否被占用 
int n; // 下一组空闲的盘块的个数
int free[50]; // 下一组存放空闲盘块的地址 
};

struct block_super //超级块   使用成组链接法来表示空闲块信息

int n; // 空闲的盘块的个数
int free[50];   // 存放进入栈中的空闲块
block memory[20449]; //全部块信息
}super_block;

struct node // i结点信息  

int file_style; // i结点 文件类型 0代表文件类型是目录文件 1代表文件类型是普通文件 
int file_length; // i结点 文件长度  
int file_mode; // i结点 读写权限  
int file_userid; // i结点 所属用户
int file_groupid; // i节点 所属组别
int file_address[100];  // i结点 文件的物理地址 
int file_ilink;
} i_node[640];

struct dir // 目录项信息 

char file_name[10]; // 文件名  
int  i_num; // 文件的结点号  
char dir_name[10]; // 文件所在的目录
int is_slink;
char P_filename[10];
} root[640];

struct physical_block //定义存放文件的数据体
{
char p[512];
}physicalBlock[20449];

struct user_open_table //用户打开表项
{
int point[25]; //用户打开文件指针(指向系统打开表项)
}UserOpenTable[8];

struct system_open_table//系统打开表项
{
char filename[10]; //文件名称
int  a_num; //指针,指向活动i结点
}SystemOpenTable[200];

struct active_node //活动i节点
{
struct node file_node; //结点具体信息
int i_count; //计数,打开该文件的用户数
int i_num; //指针,指向结点号
}ActiveNode[200];

user cur_user; //当前用户
char cur_dir[10]=“root“; //当前目录 
int address_buffer[1000];   //文件地址缓冲区
int a_num; //当前活动节点位置
char buffer[512]; //写文件内容缓冲

//声明函数
//与文件系统初始化及运行相关的函数
void InitSystem(FILE *fp);
void InitDisks();
void InitUsers();
void InitTable();
void InitCommand();
void Run(FILE *fp);
//读写信息的函数
void ReadFromFile(FILE *fp);
void WriteToFile(FILE *fp);
void ReadUsers(FILE *fps);
void SaveUsers(FILE *fps);
//支持命令运行的函数
void InsertTable(char filename[] int i_num);
int SelectTable(char filename[]);
int IsPermit(int i_num char operation);
int AllotDisks(int length);
void RecoverDisks(int length);
//与命令有关的函数
int login();
void help();
void show_curdir();
void go_dir(char tmp[]);
void back_dir();
void create_dir(char tmp[]);
void del_dir(char tmp[]);
void create_file(char tmp[]);
void open_file(char tmp[]);
void read_file(char tmp[]);
void write_file(char tmp[]);
void close_file(char tmp[]);
void delete_file(char tmp[]);
void show_info();
void logout(FILE *fp);
int change_user(FILE *fpchar tmp[]);
void change_mode(char tmp[]);
void manage_user();
void h_link(char tmp[]);
void s_link(char tmp[]);
void rename(char tmp[]);
void cas_deldir(char tmp[]);

void main()
{
FILE *fp; 
fp=fopen(“filesystem““rb“);//打开文件用二进制的方式读取
InitSystem(fp); //初始化系统
InitCommand(); //初始化命令
Run(fp); //运行
}
//初始化系统操作如果有系统文件就读取如果没有就通过调用各初始化函数初始化系统
void InitSystem(FILE *fp)
{
//如果文件存在读取如果文件不存在就初始化
if(fp==NULL)

InitDisks(); //首次生成时初始化磁盘

else 

ReadFromF

评论

共有 条评论