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

📄 i_node.cpp

📁 本程序模仿LINUX操作系统的文件存储结构
💻 CPP
字号:
#include<iostream.h>
#include<fstream.h>

struct directory
{
	int i_node_number;        // 全赋值为-1
	char name[21];
};

struct directory dir[1001][11];
int i_node[101],f;
char line[101];
void main()
{
	int now_position,m,now,i,j,n;


	int search(int);
	fstream infile;
	infile.open("Input.txt",ios::in);

	//输入文件目录?
	i_node[1]=1;										//Root directory
	dir[1][0].i_node_number=1;	infile.getline(dir[1][0].name,20);
	dir[1][1].i_node_number=1;	infile.getline(dir[1][1].name,20);
	dir[1][2].i_node_number=4;	infile.getline(dir[1][2].name,20);
	dir[1][3].i_node_number=7;	infile.getline(dir[1][3].name,20);
	dir[1][4].i_node_number=14;	infile.getline(dir[1][4].name,20);
	dir[1][5].i_node_number=9;	infile.getline(dir[1][5].name,20);
	dir[1][6].i_node_number=6;	infile.getline(dir[1][6].name,20);
	dir[1][7].i_node_number=8;	infile.getline(dir[1][7].name,20);
	dir[1][8].i_node_number=-1;	infile.getline(dir[1][8].name,20);
	dir[1][9].i_node_number=-1;	infile.getline(dir[1][9].name,20);
	dir[1][10].i_node_number=-1;	infile.getline(dir[1][10].name,20);

	i_node[6]=132;											//  /usr directory
	dir[132][0].i_node_number=6;	infile.getline(dir[132][0].name,20);
	dir[132][1].i_node_number=1;	infile.getline(dir[132][1].name,20);
	dir[132][2].i_node_number=19;	infile.getline(dir[132][2].name,20);
	dir[132][3].i_node_number=30;	infile.getline(dir[132][3].name,20);
	dir[132][4].i_node_number=51;	infile.getline(dir[132][4].name,20);
	dir[132][5].i_node_number=26;	infile.getline(dir[132][5].name,20);
	dir[132][6].i_node_number=45;	infile.getline(dir[132][6].name,20);
	dir[132][7].i_node_number=-1;	infile.getline(dir[132][7].name,20);
	dir[132][8].i_node_number=-1;	infile.getline(dir[132][8].name,20);
	dir[132][9].i_node_number=-1;	infile.getline(dir[132][9].name,20);
	dir[132][10].i_node_number=-1;	infile.getline(dir[132][10].name,20);

	i_node[26]=406;											//  /usr/ast directory
	dir[406][0].i_node_number=406;	infile.getline(dir[406][0].name,20);
	dir[406][1].i_node_number=6;	infile.getline(dir[406][1].name,20);
	dir[406][2].i_node_number=64;	infile.getline(dir[406][2].name,20);
	dir[406][3].i_node_number=92;	infile.getline(dir[406][3].name,20);
	dir[406][4].i_node_number=60;	infile.getline(dir[406][4].name,20);
	dir[406][5].i_node_number=81;	infile.getline(dir[406][5].name,20);
	dir[406][6].i_node_number=17;	infile.getline(dir[406][6].name,20);
	dir[406][7].i_node_number=-1;	infile.getline(dir[406][7].name,20);
	dir[406][8].i_node_number=-1;	infile.getline(dir[406][8].name,20);
	dir[406][9].i_node_number=-1;	infile.getline(dir[406][9].name,20);
	dir[406][10].i_node_number=-1;	infile.getline(dir[406][10].name,20);
	i_node[4]=456;
	i_node[7]=566;
	i_node[14]=643;
	i_node[9]=745;
	i_node[8]=367;
	i_node[19]=35;
	i_node[30]=465;
	i_node[51]=365;
	i_node[45]=350;
	i_node[64]=980;
	i_node[92]=789;
	i_node[60]=786;
	i_node[81]=897;
	i_node[17]=678;
	now_position=1;
	cout<<"#";
	for(n=0;n<=101;n++)
	{
		line[n]=-1;
	}
	cin.getline(line,100);
	
	while(line[0]!='n'&&line[0]!='N')
	{
		switch(line[0])
		{
		case 'l':{
				  if(line[1]=='s')
				  {
					  i=0;
					  while(dir[now_position][i].i_node_number>0&&i<10)
					  {
						  cout<<dir[now_position][i].i_node_number<<"   ";
						  j=0;
						  while(dir[now_position][i].name[j]!='#'&&j<=20)
						  {
							  cout<<dir[now_position][i].name[j];
							  j++;
						  }
						  cout<<endl;
						  i++;
					  }
						cout<<"#";
				  }
				  else
				  {
					  cout<<"error command!"<<endl;cout<<"#";
				  }
				  break;
				 }
		case 'c':{
				  if(line[1]=='d')
				  {
					  f=2;
					  while(line[f]==' ')
					  {
						  f++;
					  }
					  switch(line[f])
					  {
					  case '.':{f++;
						        if(line[f]=='.')
								{
									m=dir[now_position][1].i_node_number;
									now_position=i_node[m];
									f++;
								}
								break;
							   }
					  case '/':{now_position=1;
							   }
								break;
					  }
					  
					  now=search(now_position);
					  while(now>0&&line[f]!=-1)     
					  {
						  now=search(now);
					  }
					  if(now<0)
					  {
						  cout<<"no such file"<<endl;cout<<"#";
					  }
					  else
					  {
						  now_position=now;
						  cout<<now<<endl;cout<<"#";
					  }
				  }
				  else
				  {
					  cout<<"error command!"<<endl;cout<<"#";
				  }
				  break;
				 }
		default :{
					  cout<<"error command!"<<endl;cout<<"#";
				 }
		}
		for(n=0;n<=101;n++)
		{
		line[n]=-1;
		}
		cin.getline(line,100);
		f=0;
	}

}				
int search (int p)
{
	char s_name[11];
	char b,flag,j,inode,i;
	int n;
	f++;
	b=line[f];
	i=0;
	while(b!='/'&&b!=-1)   
	{
		s_name[i]=b;
		i++;
		f++;
		b=line[f];
	}
	s_name[i]='#';


	i=0;
	flag=0;
	while(dir[p][i].i_node_number>0 && i<10&&flag==0)
	{
		j=0;
		while(dir[p][i].name[j]==s_name[j]&&dir[p][i].name[j]!='#')
		{
			j++;
		}

		if(dir[p][i].name[j]=='#')
		{
			flag=1;
			
			n=s_name[j];

		}
		i++;
	}
	if(flag==1)
	{
		inode=dir[p][i-1].i_node_number;
		return (i_node[inode]);
	}
	else
	{
		return(-1);
	}

	
}			

⌨️ 快捷键说明

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