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语言共享库 对任何程序员来说库都是必不可少的.所谓的库是指已经编译好的供你使用的代码.它们常常提供一些通用功能,例如链表和二叉树可以用来保存任何数据,或者是一个特定的功能例 ...
随机推荐
- 离线安装swashbuckle(webapi自动文档及测试工具)
1.找到已经成功安装过的项目根目录的packages文件夹拷贝到新的项目的根目录 2.vs设置nuget程序包源 将源:地址改为新项目的packages文件夹 3.重新编译并修改代码 右键项目-> ...
- asp.net教程:编译错误同时存在于不同dll中
asp.net 编译错误类型“同时存在于”不同的dll中. 出现这种错误大概有三种情况: 1.ASPX页面,一个*.ASPX,对应着一个*.cs文件,两者其实是一个文件,通过两者实现代码分离,每个*. ...
- 向 div 元素添加圆角边框:
div { border:2px solid; border-radius:25px; }
- thinkphp验证码
thinkphp自带验证码 前端页面: <div style="position:absolute;z-index:3;top:160px;left:180px;"> ...
- css实现小三角(原理)
效果图如图1所示:(简单示范,有点丑,莫介意) PS:兼容IE,FF , chrome ,360安全浏览器 先讲下原理吧,如图2所示: 这个div的样式如下所示: div{ width: 0px; h ...
- 第 31 章 项目实战-PC 端固定布局[4]
学习要点: 1.热门旅游区 2.标题介绍区 3.旅游项目区 主讲教师:李炎恢 本章主要开始使用学习用 HTML5 和 CSS3 来构建 Web 页面,第一个项目采用 PC 端固定布局来实现. 一.热门 ...
- 云巴:基于MQTT协议的实时通信编程模型
概要 有人常问,云巴实时通信系统到底提供了一种怎样的服务,与其他提供推送或 IM 服务的厂商有何本质区别.其实,从技术角度分析,云巴与其它同类厂商都是面向开发者的通信服务,宏观的编程模型都是大同小异, ...
- ABP中使用Redis Cache(2)
上一篇讲解了如何在ABP中使用Redis Cache,虽然能够正常的访问Redis,但是Redis里的信息无法同步更新.本文将讲解如何实现Redis Cache与实体同步更新.要实现数据的同步更新,我 ...
- MongoDB分片(sharding)
1.概念 分片(sharding)是指将数据拆分,将其分散存在不同的机器上的过程.有时也用分区(partitioning)来表示这个概念.将数据分散到不同的机器上,不需要功能强大的大型计算机就可以储存 ...
- org.springframework.context.ApplicationContextAware使用理解
一.这个接口有什么用? 当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean.换句话说,就是这个类可以 ...