程序效果:

  只实现了login cd ls cat 四个命令。而且只能在 Windows 下运行。

代码:

//main.cpp 1 #include <iostream>
 #include "shell.h"
 using namespace std;
 int com_to_int(int com_num,char * command,char** coms){

     ;
 }
 int main()
 {
     ;
     char command[MAX_LENGTH_OF_COMMAND];
     char *coms[COM_NUM]={"login","ls","cd","cat","exit"};
     int (*func_ptrs[COM_NUM])(char *)={login,ls,cd,cat,shellexit};
     while(true){
         printf("%s%s%s%s%s","[",USER_NAME," ",GLOBLE_PATH,"]");
         gets(command);
         ){
             continue;
         }
         //printf("command: %s\n",command);
         //printf("command: %s\n",command);
         int i;
         ;i<COM_NUM;i++){
             ){
                 func_ptrs[i](command);
                 break;
             }
         }
         if(i==COM_NUM){
             printf("command not found.\n");
         }
     }
     cd("C:/0");
     ls(GLOBLE_PATH);
     ;
 }
//shell.h  1 #ifndef SHELL_H_INCLUDED
 #define SHELL_H_INCLUDED
 #include<io.h>
 #include<string.h>
 #include<stdio.h>
 #include<stdlib.h>

 #define MAX_LENGTH_OF_PATH 256
 #define MAX_LENGTH_OF_USERNAME 50
 #define MAX_LENGTH_OF_COMMAND 50
 #define MAX_LENGTH_OF_LINE 256
 ','\0'};
 char USER_NAME[MAX_LENGTH_OF_USERNAME]= {'g','u','e','s','t','\0'};
 int login(char * command)
 {
     printf("user name:");
     char username[MAX_LENGTH_OF_USERNAME];
     gets(username);
     FILE * pwd;
     pwd = fopen ("pwd","r");

     if (pwd!=NULL)
     {
         char line[MAX_LENGTH_OF_LINE];
         while (!feof(pwd))
         {
             if(fgets(line,MAX_LENGTH_OF_LINE,pwd)!=NULL)
             {
                 char * name=strtok(line," ");
                 //printf("%s\n",name);
                 )
                 {
                     char password[MAX_LENGTH_OF_USERNAME];
                     printf("password:");
                     gets(password);
                     char * pasw=strtok(NULL," \n\r");
                     //printf("file password:%s\n",pasw);
                     )
                     {
                         strcpy(USER_NAME,username);
                     }
                     else
                     {
                         printf("wrong password.\n");
                     }
                     fclose (pwd);
                     ;
                 }
             }
         }
         printf("user not exist.\n");
         fclose (pwd);
     }
     else
     {
         printf("login error.pwd file not exist or not able to open.\n");
     }
     ;
 }
 int shellexit(char * command)
 {
     exit();
     ;
 }
 int cat_file(char * file_path)
 {
     FILE* f=fopen(file_path,"r");
     if(f==NULL)
     {
         printf("file does not exist.\n");
         ;
     }
     char line[MAX_LENGTH_OF_LINE];
     while(!feof(f))
     {
         fgets(line,MAX_LENGTH_OF_LINE,f);
         ;i<strlen(line);i++){
             if(line[i]=='\0')break;
             printf("%c",line[i]);
         }

     }
     printf("\n");
     ;
 }
 int cat(char * command)
 {
     char * path=strtok(command," ");
     path=strtok(NULL," ");
     //printf("path:%s",path);
     cat_file(path);
     ;
 }

 int cd_path(char *path)
 {
     struct _finddata_t f;
     int p;
     //printf("1");
     /* FILE * pFile;
     pFile = fopen (path,"r");
     if (pFile!=NULL)
     {      printf("2");
     }printf("3");*/
     )
     {
         //printf("%d",p);
         //printf("2");
         //printf(" %d ",f.attrib);
         if(f.attrib&_A_SUBDIR)
         {
             //printf("4");
             strcpy(GLOBLE_PATH,path);
             ;
         }
         else
         {
             printf("destination path is not a folder.\n");
         }
     }
     else
     {
         printf("destination not exist.\n");
     }
     ;
 }

 int cd(char * command)
 {
     char * path=strtok(command," ");
     path=strtok(NULL," ");
     //printf("path:%s",path);
     cd_path(path);
     ;
 }

 int ls_path(char * path)
 {
     struct _finddata_t f;
     int p;
     char name[MAX_LENGTH_OF_PATH];
     strcpy(name,path);
     strcat(name,"/*");
     //printf("1");
     )
     {
         //read(p,filename,)
         //printf("2");
         printf(f.name);
         printf("\n");
         )
         {
             printf(f.name);
             printf("\n");
         }
     }
     else
     {
     }
     ;
 }
 int ls(char * command)
 {
     char * path=strtok(command," ");
     path=strtok(NULL," ");
     //printf("path:%s",path);
     )
     {
         ls_path(GLOBLE_PATH);
     }
     else
     {
         ls_path(path);
     }
     ;
 }
 #endif // SHELL_H_INCLUDED

外部资源文件:

pwd(login 命令使用):

ma
xue
wei 

程序写于大三下学期,2016年3月。

2016.4.12更新博客。

END

Shell(C++实现,CodeBlocks+GCC编译)的更多相关文章

  1. 局域网象棋游戏(C++实现,使用Socket,界面使用Win32,CodeBlocks+GCC编译)

    目录 成果 运行效果图 过程 1. 首先的问题是下棋的两端应该是什么样的? 2. 接下来的问题是怎么表示,怎么存储? 3. 然后应该怎么通信呢? 代码 main.cpp chinese_chess.h ...

  2. 简单的词法分析和语法分析(C++实现,CodeBlocks+GCC编译)

    说明: 分析的语言是SNL语言,详见<编译程序的设计与实现>( 刘磊.金英.张晶.张荷花.单郸编著) 词法分析就是实现了词法分析的自动机 语法分析使用递归下降法 运行结果: 词法分析 得到 ...

  3. 俄罗斯方块(Win32实现,Codeblocks+GCC编译)

    缘起: 在玩Codeblocks自带的俄罗斯方块时觉得不错,然而有时间限制.所以想自己再写一个. 程序效果: 主要内容: 程序中有一个board数组,其中有要显示的部分,也有不显示的部分,不显示的部分 ...

  4. 在文件夹中 的指定类型文件中 查找字符串(CodeBlocks+GCC编译,控制台程序,仅能在Windows上运行)

    说明: 程序使用 io.h 中的 _findfirst 和 _findnext 函数遍历文件夹,故而程序只能在 Windows 下使用. 程序遍历当前文件夹,对其中的文件夹执行递归遍历.同时检查遍历到 ...

  5. GLine游戏(Win32GUI实现,CodeBlocks+GCC编译)

    游戏规则: 在10X10的棋盘上有五种颜色的棋子. 点击一个棋子,再点击一个空格子,如果两者之间有一条路径的话,棋子会移动到空格子内. 每移动一次,棋盘上会增加三个棋子,其位置和颜色都是随机的. 当横 ...

  6. Socket服务端和客户端(C++,CodeBlocks+GCC编译)

    //main.cpp 1 #include "j_socket.h" #include <stdio.h> #include <pthread.h> ; j ...

  7. 抓鼠标的猫(Win32实现,Codeblocks+GCC编译)

    程序效果: 猫的眼睛一直跟着鼠标移动: 鼠标经过猫的右脚附近时,猫会抓住鼠标.(未使用Hook) 代码: //main.cpp 1 #include <windows.h> #includ ...

  8. GCC 编译详解

    GNU CC(简称为Gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C.C++和Object C等语言编写的程序.Gcc不仅功能强大,而且可以编译如C.C++.Object C.Jav ...

  9. 在Linux使用GCC编译C语言共享库

    在Linux使用GCC编译C语言共享库 对任何程序员来说库都是必不可少的.所谓的库是指已经编译好的供你使用的代码.它们常常提供一些通用功能,例如链表和二叉树可以用来保存任何数据,或者是一个特定的功能例 ...

随机推荐

  1. javaScript系列:js中获取时间new Date()详细介绍

    var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1970-????)m ...

  2. 引用Microsoft.Office.Interop.Excel出现的问题

    引用Microsoft.Office.Interop.Excel出现的问题   转自:http://www.hccar.com/Content,2008,6,11,75.aspx,作者:方继祥 操作背 ...

  3. MessageBox的常用方法

    一 函数原型及参数 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer; hWnd:对话框父窗口句柄, ...

  4. Oracle取消用户连续登录失败次数限制

    当用户连续登录失败次数过多时,Oracle会锁定该用户,“FAILED_LOGIN_ATTEMPTS”用于设置最大次数,超过该值则锁定该帐号. 要取消用户连续登录失败次数的限制可以按照以下方法操作: ...

  5. php rsa加密解密实例

    1.加密解密的第一步是生成公钥.私钥对,私钥加密的内容能通过公钥解密(反过来亦可以) 下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin ...

  6. php实现设计模式之 组合模式

    <?php /** * 组合模式 * * 将对象组合成树形结构以表示"部分-整体"的层次结构,使得客户对单个对象和复合对象的使用具有一致性 * * * 1) 抽象构件角色Co ...

  7. [转] js实现html table 行,列锁定

    js实现html table 表头,指定列锁定 实现效果如下: 感兴趣的朋友可以直接复制出来运行看效果. <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTM ...

  8. Linux(CentOS 6.7)下配置Mono和Jexus并且部署ASP.NET MVC3、4、5和WebApi(跨平台)

    1.开篇说明 a. 首先我在写这篇博客之前,已经在自己本地配置了mono和jexus并且成功部署了asp.net mvc项目,我也是依赖于在网上查找的各种资料来配置环境并且部署项目的,而其在网上也已有 ...

  9. 简单介绍JSON

    如下图:

  10. js中constructor和prototype

    在最开始学习js的时候,我们在讲到原型链和构造函数的时候经常会有一个例子 如果我们定义函数如下: function Foo() { /* .. */ } Foo.prototype.bar = fun ...