⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 un.cpp

📁 UNIX文件系统摸拟
💻 CPP
字号:
#include<iostream.h>
#include<string.h>
#include<stdio.h>
typedef char CString;
const int DIRSIZE=20;
const int DIRNUM=20;
const int NADDR=512;
const int NICFREE=512;
const int NICINOD=512;
const int NOFILE=20;

//文件目录数据结构,16个字节
struct direct{ 
	char	 d_name[DIRSIZE];	 //目录名
	unsigned int d_ino; 		 //目录号
};
//目录数据结构
struct dir{ 
	struct direct direct[DIRNUM];	
	int size;
};
struct inode{ 
			char   i_flag; 
	struct inode   *i_forw; 
	struct inode   *i_back; 
	unsigned int   i_ino;			//磁盘i节点标号 
	unsigned int   i_count;			//引用计数 
	unsigned int   di_size;			//文件大小
	unsigned short di_number;		//关联文件数,当为0时,则删除该文件
	unsigned short di_mode;			//存取权限
	unsigned short di_uid;			//磁盘i节点用户id 
	unsigned short di_gid;			//磁盘i节点组id 
	unsigned short di_addr[NADDR]; //物理块号 
};
//磁盘i节点数据结构,32个字节
struct dinode{ 
	unsigned int   di_size;    		//文件大小
	unsigned short di_number;  		//关联文件数 
	unsigned short di_mode;			//存取权限
	unsigned short di_uid;			//磁盘i节点用户id
	unsigned short di_gid;			//磁盘i节点组id
	unsigned short di_addr[NADDR]; //物理块号
};
//超级块数据结构 
struct filsys{ 
	char s_fmod; 						//超级块修改标志
	unsigned int   s_free[NICFREE]; 	//空闲块堆栈 
	unsigned int   s_ninode; 			//空闲i节点数 
	unsigned int   s_nfree; 				//空闲块块数 
	unsigned int   s_inode[NICINOD];	//空闲i节点数组
	unsigned int   s_rinode;		     	//铭记i节点
	unsigned short s_pfree;    		 	//空闲块指针 
	unsigned short s_isize;    			//i节点块块数 
	unsigned short s_pinode;  			//空闲i节点指针 
	unsigned long  s_fsize;    			//数据块块数 
};			
//系统打开表数据结构 
struct file{ 
	char		 f_flag;			//文件操作标志
	unsigned int f_count;  	//引用计数
	unsigned     longf_off; //读写指针 
	struct inode *f_inode;   //指向内存I节点
};
//用户数据结构
struct user{ 
	char u_name;    		//用户名
	char u_pass;    		//用户密码
	char u_default_mode; 	//访问权限 
	char u_uid;    		//用户标志 
	char u_gid;    		//用户组标志 
	char u_ofile[NOFILE];	//用户打开表 
};
user users[8];//用户数量,全局
//注册新用户的程序段
void registeruser(int i)
{
	CString tempname,temp,temppassword;
	if(i>=8)
	{
		printf("Registered user has already fulled./n");
	}
	else 
	{
		printf("Please input your user name(Max 11 characters):");
		scanf("%s",tempname);
		printf("Please input your password(Max 11 characters):");
		scanf("%s",temp);
		printf("Please input your password again:");
		scanf("%s",temppassword);
		if(strcmp(&temppassword,&temp)==0)
		{
			printf("OK! You have register ! You can login your accounts./n");
			strcpy(&users[i].u_name,&tempname);
			strcpy(&users[i].u_pass,&temppassword);

		}
		else
		{
			printf("Sorry!Password incorrect.You can't login/n");
		}
	}
}
//系统初始化以及登录/ 注册的程序段
int loginin(){
	return 1;
}
void initialize()
{
	char c;
	int i=0;
	cout<<"- - - - Welcome to this system ! - - - - \n";
	cout<<"initializing. . . \n";
	cout<<"initializing. . . \n";
	strcpy(&users[i].u_name,"lwj");
	strcpy(&users[i].u_pass,"123");
	for(;;)
	{
		cout<<"Do you want to Register or Login?(R/ L)";
		cin>>c;
		switch(c)
		{
		case'q':;
		case'Q':break;
		case'r':;
		case'R':registeruser(i);break;
		case'l':;
		case'L':if(loginin()==1) c='q';break;
		default:break;
		}
	}
//	if(c=='q'||c=='Q') 
//		break;
//		else cout<<endl;
}
//typedef struct node *point;    
struct node{ 
	int d_name;	//邻接点
	node *next;      
}; 

//列出文件目录的程序段
void dirstru()
{
	int i=0;
	printf("CURRENT DIRECTORY:/n");
	node *p=new node;
	while(p->next!=NULL) 
	{
		i++;
		p=p->next;
		printf( "%s/ n",p->d_name) ;
	}
	printf( "/ t %d file (s) / n",i) ;
	printf( "/ t %d directorie (s) / n",i) ;
}
void main(){
	void initialize();
}//main

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -