📄 i_node.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 + -