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语言共享库 对任何程序员来说库都是必不可少的.所谓的库是指已经编译好的供你使用的代码.它们常常提供一些通用功能,例如链表和二叉树可以用来保存任何数据,或者是一个特定的功能例 ...
随机推荐
- Java Web 学习路线
实际上,如果时间安排合理的话,大概需要六个月左右,有些基础好,自学能力强的朋友,甚至在四个月左右就开始找工作了.大三的时候,我萌生了放弃本专业的念头,断断续续学 Java Web 累计一年半左右,总算 ...
- 用eclipse做项目中常遇到的问题-如何创建并读取properties文件
在用eclipse做项目开发的时候我们常常会将一些重要的内容写在配置文件里面, 特别是连接数据库的url,username,password等信息,我们常常会新建一个properties文件将所有信息 ...
- 云巴:基于MQTT协议的实时通信编程模型
概要 有人常问,云巴实时通信系统到底提供了一种怎样的服务,与其他提供推送或 IM 服务的厂商有何本质区别.其实,从技术角度分析,云巴与其它同类厂商都是面向开发者的通信服务,宏观的编程模型都是大同小异, ...
- php实现设计模式之 抽象工厂模式
<?php /*抽象工厂模式:提供一个创建一系统相关或相互依赖对象的接口,而无需指定它们具体的类 * 创建型模式 */ //抽象小米工厂,能制造小米一,小米二 abstract class mi ...
- ASP.NET Redis 开发
文件并发(日志处理)--队列--Redis+Log4Net Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高 ...
- C# out ref 重载
今天看极客学院wiki时候看到了out,ref的介绍,之前对这个知识点没有深刻认识,所以就写了个小测试看了下,瞬间明白了. using System; using System.Collections ...
- 前端工程师如何快速的开发一个微信JSSDK应用
亲们,订阅号出来已经很久了,作为一个前端工程师或者全栈工程师,你是不是错过了什么?大概许多攻城狮同砚还没有反应过来订阅号怎么回事,就马上要被微信的应用号秀一脸了.在应用号还没有正式出来之前,我们赶紧一 ...
- HTTP 协议整理(转)
HTTP 协议 作为web开发人员,了解一些http协议的知识很有必要.本文简单介绍了HTTP协议的知识,若有错误的地方,望大家斧正. 1.HTTP协议是什么? http协议是一个应用层的协议.规定了 ...
- asp.net mvc 简易通用自定义Pager实现分页
asp.net mvc 自定义Pager实现分页 Intro 一个WEB应用程序中经常会用到数据分页,本文将实现一个简单通用的分页组件,包含一个 PagerModel (用来保存页码信息),一个 Ht ...
- iOS之搜索框UISearchController的使用(iOS8.0以后替代UISearchBar+display)
在iOS 8.0以上版本中, 我们可以使用UISearchController来非常方便地在UITableView中添加搜索框. 而在之前版本中, 我们还是必须使用UISearchBar + UISe ...