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语言共享库 对任何程序员来说库都是必不可少的.所谓的库是指已经编译好的供你使用的代码.它们常常提供一些通用功能,例如链表和二叉树可以用来保存任何数据,或者是一个特定的功能例 ...
随机推荐
- 响应式WEB设计的9项基本原则
响 应式Web设计对于解决多类型屏幕问题来说是个不错方案,但从印刷的角度来看,其却存在着很多的困难.没有固定的页面尺寸.没有毫米或英寸,没有任何物理 限制,让人感到无从下手.随着建立网站可用的各种小工 ...
- Java中,调试按钮的作用
调试按钮的主要作用,找错 首先在我们需要找错位置的左边(数字前边)鼠标右键,点击切换断点 点击调试: 找到单步跳入按钮,即可实现步骤的单独运行,方便查找错误的原因, 查找结束记得将断点取消
- PHP流程控制之循环结构
计算机程序最擅长的功能之一就是按规定的条件,重复执行某些操作.循环结构可以减少源程序重复书写的工作量,即在给定条件成立时,反复执行某程序段,直到条件不成立为止.给定的条件称为循环条件,反复执行的程序段 ...
- php实现设计模式之 解释器模式
<?php /* * 解释器模式:给定一种语言,定义它文法的一种表示,并定义一个解释器,该解释器利用该表示来解释语言中的句子 * */ class Expression { function i ...
- redhat6.4安装MySQL-server-5.5.28-1.linux2.6.x86_64.rpm
首先下载下面三个文件: MySQL-server-5.5.28-1.linux2.6.x86_64.rpm MySQL-client-5.5.28-1.linux2.6.x86_64.rpm MySQ ...
- javascript的函数(二)
1. 函数的作用域 作用域是指变量的存在的范围.javascript中有两种作用域,一种是全局作用域,变量在整个程序中一直存在,另一种是函数作用域,变量只存在于函数体内部.在函数体外部声明的变量就是全 ...
- UIPickerView的使用(三)
前两篇文章 UIPickerView的使用(一) . UIPickerView的使用(二),学习了UIPickerView的单列选择器和双列选择器的使用. 现在我们一起学习相互依赖的多列选择器 1.遵 ...
- 主成分分析(principal components analysis, PCA)
原理 计算方法 主要性质 有关统计量 主成分个数的选取 ------------------------------------------------------------------------ ...
- MyEclipse 2016 CI 3发布
JSjet 语法高亮 受够了Eclipse中的JavaScript编码体验?那就来试试MyEclipse 2016 CI 3.JSjet改进了JavaScript编码的语法高亮功能,大大提升了代码的可 ...
- iOS 二维码扫描
// 导入 AVFoundation.framwork 框架#import "HDCodeViewController.h" #import "HDNormalViewC ...