struct FileNode* CreateFileNode(char filename[],int isdir,int i_nlink) {
struct FileNode* node=(struct FileNode*)malloc(sizeof(struct FileNode));//ÉêÇë½áµã¿Õ¼ä //ÏàÓ¦ÄÚÈݸ³³õÖµ
strcpy(node->filename,filename); node->isdir=isdir; node->i_nlink=i_nlink; node->parent=NULL; node->child=NULL;
node->sibling_prev=NULL;
node->sibling_next=NULL; return node; }
//³õʼ»¯ÎļþÊ÷
void Init() { struct FileNode *binNode,*usrNode, *unixNode,*etcNode,*libNode,*userNode, *binNode2,*liuNode,*sunNode,*ftiNode; strcpy(path,\¸ùĿ¼дÈ뵱ǰ·¾¶ //´´½¨ÎļþÊ÷µÄ½áµã
binNode=CreateFileNode(\ usrNode=CreateFileNode(\ unixNode=CreateFileNode(\ etcNode=CreateFileNode(\ libNode=CreateFileNode(\ userNode=CreateFileNode(\ binNode2=CreateFileNode(\ liuNode=CreateFileNode(\ sunNode=CreateFileNode(\ ftiNode=CreateFileNode(\ cp=tp=root=CreateFileNode(\ //½áµãÏàÓ¦ÄÚÈݸ³Öµ root->parent=NULL; root->child=binNode;
root->sibling_prev=root->sibling_next=NULL;
binNode->parent=root; binNode->child=NULL;
binNode->sibling_prev=NULL; binNode->sibling_next=usrNode;
usrNode->parent=NULL; usrNode->child=libNode;
usrNode->sibling_prev=binNode;
usrNode->sibling_next=unixNode;
9
unixNode->parent=NULL; unixNode->child=NULL;
unixNode->sibling_prev=usrNode; unixNode->sibling_next=etcNode;
etcNode->parent=NULL; etcNode->child=NULL;
etcNode->sibling_prev=unixNode; etcNode->sibling_next=NULL;
libNode->parent=usrNode; libNode->child=liuNode;
libNode->sibling_prev=NULL; libNode->sibling_next=userNode;
userNode->parent=NULL; userNode->child=NULL;
userNode->sibling_prev=libNode; userNode->sibling_next=binNode2;
binNode2->parent=NULL; binNode2->child=NULL;
binNode2->sibling_prev=userNode; binNode2->sibling_next=NULL;
liuNode->parent=libNode; liuNode->child=NULL;
liuNode->sibling_prev=NULL; liuNode->sibling_next=sunNode;
sunNode->parent=NULL; sunNode->child=NULL;
sunNode->sibling_prev=liuNode; sunNode->sibling_next=ftiNode;
ftiNode->parent=NULL; ftiNode->child=NULL;
ftiNode->sibling_prev=sunNode; ftiNode->sibling_next=NULL;
}
//»ñÈ¡Îļþ»òĿ¼Ãû£¬²¢°ÑÖ¸ÕëÖ¸ÏòÆä¸¸Ç×½áµãint FindFilename(char Para2[]) { i=strlen(Para2)-1;
10
j=0;
while(Para2[i]!='/'&& i>=0) {
filename[j]=Para2[i];
i--; j++;
}
filename[j]='\\0';//»ñµÃÄæÐòµÄÎļþ»òĿ¼Ãû£¬´æÈëfilenameÖÐ if(i<0) Para2[i+1]='\\0';
else Para2[i]='\\0'; j--;
for(i=0;i tmp=filename[i]; filename[i]=filename[j]; filename[j]=tmp; } if(strlen(Para2)>0) { //²éÕÒ·¾¶ int sign=FindPath(Para2); if(sign==0) return 0; } return 1; } //»º³åÇø°²È«ÊäÈë×Óº¯Êý //Èç¹ûÊäÈ볬¹ýbuffer_len£¬Ôò½ØÈ¡Ç°buffer_len-1³¤¶ÈµÄÊäÈ룬 //buffer_len´¦×Ö·ûÓÃ'/0'´úÌæ int GetInput(char* buffer,unsigned int buffer_len) { unsigned int count=0; while(count } count++; } while(getchar()!=10); buffer[buffer_len-1]='\\0'; return -1; } //¸Ä±äĿ¼º¯Êý int cdComd() { if(!CheckCommand()) //ÃüÁî¼ì²é return 0; if(strcmp(Para2,\ //¶Ôcd..ÃüÁîµÄ´¦Àí int i; 11 while(cp->sibling_prev) cp=cp->sibling_prev; if(cp->parent) { cp=cp->parent; } //ÕÒµ½¸¸Ç×½áµã else { return 0; } //¶Ôµ±Ç°Â·¾¶½øÐÐÏàÓ¦´¦Àí i=strlen(path); while(path[i]!='/'&&i>0) i--; if(i!=0) path[i]='\\0'; else path[i+1]='\\0'; } else { FindPath(Para2);//²éÕÒ·¾¶ } return 1; } //´´½¨Ä¿Â¼º¯Êý int mdComd() { struct FileNode * temp,*tp; temp=CreateFileNode(\ int sign; if(strlen(Para2)==0) { //²ÎÊý²»ÄÜΪ¿Õ printf(\ÃüÁî¸ñʽÓдíÎó.\\n\ return 0; } if(strlen(Para2)>20) { //³¤¶È¼ì²é printf(\Ŀ¼Ãû¹ý³¤\\n\ return 0; } //¸ñʽ¼ì²é if (!(isalpha(Para2[0])||Para2[0]=='_'||Para2[0]=='\\0'||Para2[0]=='/')) { printf(\Ŀ¼Ãû¸ñʽÓдí!\\n\Ŀ¼Ê××Öĸ¿ÉÒÔΪ'×Öĸ'»ò'Êý×Ö'»ò'/'*/ return 0; } sign=FindFilename(Para2); //»ñȡĿ¼Ãû if(sign==0) return 0; if(cp->isdir!=1) { //È統ǰָÕëÖ¸ÏòµÄÊÇÎļþ£¬Ôò±¨´í printf(\ return 0; } 12
Ïà¹ØÍÆ¼ö£º