Shell(C++实现,CodeBlocks+GCC编译)
程序效果:
只实现了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编译)的更多相关文章
- 局域网象棋游戏(C++实现,使用Socket,界面使用Win32,CodeBlocks+GCC编译)
目录 成果 运行效果图 过程 1. 首先的问题是下棋的两端应该是什么样的? 2. 接下来的问题是怎么表示,怎么存储? 3. 然后应该怎么通信呢? 代码 main.cpp chinese_chess.h ...
- 简单的词法分析和语法分析(C++实现,CodeBlocks+GCC编译)
说明: 分析的语言是SNL语言,详见<编译程序的设计与实现>( 刘磊.金英.张晶.张荷花.单郸编著) 词法分析就是实现了词法分析的自动机 语法分析使用递归下降法 运行结果: 词法分析 得到 ...
- 俄罗斯方块(Win32实现,Codeblocks+GCC编译)
缘起: 在玩Codeblocks自带的俄罗斯方块时觉得不错,然而有时间限制.所以想自己再写一个. 程序效果: 主要内容: 程序中有一个board数组,其中有要显示的部分,也有不显示的部分,不显示的部分 ...
- 在文件夹中 的指定类型文件中 查找字符串(CodeBlocks+GCC编译,控制台程序,仅能在Windows上运行)
说明: 程序使用 io.h 中的 _findfirst 和 _findnext 函数遍历文件夹,故而程序只能在 Windows 下使用. 程序遍历当前文件夹,对其中的文件夹执行递归遍历.同时检查遍历到 ...
- GLine游戏(Win32GUI实现,CodeBlocks+GCC编译)
游戏规则: 在10X10的棋盘上有五种颜色的棋子. 点击一个棋子,再点击一个空格子,如果两者之间有一条路径的话,棋子会移动到空格子内. 每移动一次,棋盘上会增加三个棋子,其位置和颜色都是随机的. 当横 ...
- Socket服务端和客户端(C++,CodeBlocks+GCC编译)
//main.cpp 1 #include "j_socket.h" #include <stdio.h> #include <pthread.h> ; j ...
- 抓鼠标的猫(Win32实现,Codeblocks+GCC编译)
程序效果: 猫的眼睛一直跟着鼠标移动: 鼠标经过猫的右脚附近时,猫会抓住鼠标.(未使用Hook) 代码: //main.cpp 1 #include <windows.h> #includ ...
- GCC 编译详解
GNU CC(简称为Gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C.C++和Object C等语言编写的程序.Gcc不仅功能强大,而且可以编译如C.C++.Object C.Jav ...
- 在Linux使用GCC编译C语言共享库
在Linux使用GCC编译C语言共享库 对任何程序员来说库都是必不可少的.所谓的库是指已经编译好的供你使用的代码.它们常常提供一些通用功能,例如链表和二叉树可以用来保存任何数据,或者是一个特定的功能例 ...
随机推荐
- javaScript系列:js中获取时间new Date()详细介绍
var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1970-????)m ...
- 引用Microsoft.Office.Interop.Excel出现的问题
引用Microsoft.Office.Interop.Excel出现的问题 转自:http://www.hccar.com/Content,2008,6,11,75.aspx,作者:方继祥 操作背 ...
- MessageBox的常用方法
一 函数原型及参数 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer; hWnd:对话框父窗口句柄, ...
- Oracle取消用户连续登录失败次数限制
当用户连续登录失败次数过多时,Oracle会锁定该用户,“FAILED_LOGIN_ATTEMPTS”用于设置最大次数,超过该值则锁定该帐号. 要取消用户连续登录失败次数的限制可以按照以下方法操作: ...
- php rsa加密解密实例
1.加密解密的第一步是生成公钥.私钥对,私钥加密的内容能通过公钥解密(反过来亦可以) 下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin ...
- php实现设计模式之 组合模式
<?php /** * 组合模式 * * 将对象组合成树形结构以表示"部分-整体"的层次结构,使得客户对单个对象和复合对象的使用具有一致性 * * * 1) 抽象构件角色Co ...
- [转] js实现html table 行,列锁定
js实现html table 表头,指定列锁定 实现效果如下: 感兴趣的朋友可以直接复制出来运行看效果. <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTM ...
- Linux(CentOS 6.7)下配置Mono和Jexus并且部署ASP.NET MVC3、4、5和WebApi(跨平台)
1.开篇说明 a. 首先我在写这篇博客之前,已经在自己本地配置了mono和jexus并且成功部署了asp.net mvc项目,我也是依赖于在网上查找的各种资料来配置环境并且部署项目的,而其在网上也已有 ...
- 简单介绍JSON
如下图:
- js中constructor和prototype
在最开始学习js的时候,我们在讲到原型链和构造函数的时候经常会有一个例子 如果我们定义函数如下: function Foo() { /* .. */ } Foo.prototype.bar = fun ...