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语言共享库 对任何程序员来说库都是必不可少的.所谓的库是指已经编译好的供你使用的代码.它们常常提供一些通用功能,例如链表和二叉树可以用来保存任何数据,或者是一个特定的功能例 ...
随机推荐
- de4dot3.14更新文件打包下载
刚发现de4dot更新了,虽然只是10月份的文件更新,并未发布新的release,但好多人还不会编译... 关于de4dot有何功能就不再讲了. 本文主要提供编译通过后的打包文件下载. 首先下载de4 ...
- 【C#】 异常处理
异常是在程序执行期间出现的问题.C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零等异情况. 异常提供了一种把程序控制权从某个部分转移到另一个部分的方式. C# 异常处理时建立在四个 ...
- Oracle学习总结_day03_day04_条件查询_排序_函数_子查询
本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! day03_条件查询_排序_函数 清空回收站: PUR ...
- python计算器
思路:优先级处理思路一:正则表达式+递归(计算时间慢)思路二:堆栈的方式队列:先进先出电梯-->队列上电梯(入队123):第三个人3,第二个人2,第一个人1>>> li = [ ...
- 深入理解和应用Float属性
一.Float的特性 1. 应用于文字围绕图片 2. 创建一个块级框 3. 多列浮动布局 4. 浮动元素的宽度.高度自适应,但可以设置其值. 二.核心解决的问题 文字围绕图片:img标签与多个文本标签 ...
- php动态更改post_max_size, upload_max_filesize等值
在配置文件里 有些PHP 配置选项可以用int_set() 函数 直接在 项目里修改.但是有些值确不行.例如和上传文件有关的post_max_size和upload_max_filesize int_ ...
- 2016年4月最佳的20款 jQuery 插件推荐
这个列表包括20个我们觉得是最有用的免费的 jQuery 插件,它们都是最具创新性和最省时省力的解决方案,很多都是现代化的设计和开发中碰到的问题的处理方案.如果你熟悉下面列出的任何插件,请与我们的读者 ...
- html meta标签使用总结
meta标签作用 META标签是HTML标记HEAD区的一个关键标签,提供文档字符集.使用语言.作者等基本信息,以及对关键词和网页等级的设定等,最大的作用是能够做搜索引擎优化(SEO). PS:便于搜 ...
- js for循环中i++ 和 ++i有什么区别?
平时都是这样写的for循环, for(var i = 0; i < 20 ; i++){ .... } 但我看有的人这样写 for (var i = 0; i < 20 ; ++i) { ...
- Android4.4访问外部存储
在Android 4.4系统中,外置存储卡(SD卡)被称为二级外部存储设备(secondary storage),应用程序已无法往外置存储卡(SD卡)写入数据,并且WRITE_EXTERNAL_STO ...