Shell(C++实现,CodeBlocks+GCC编译)

//main.cpp 1 #include <iostream>
 2 #include "shell.h"
 3 using namespace std;
 4 int com_to_int(int com_num,char * command,char** coms){
 5
 6     return -1;
 7 }
 8 int main()
 9 {
10     const int COM_NUM=5;
11     char command[MAX_LENGTH_OF_COMMAND];
12     char *coms[COM_NUM]={"login","ls","cd","cat","exit"};
13     int (*func_ptrs[COM_NUM])(char *)={login,ls,cd,cat,shellexit};
14     while(true){
15         printf("%s%s%s%s%s","[",USER_NAME," ",GLOBLE_PATH,"]");
16         gets(command);
17         if(strcmp(command,"")==0){
18             continue;
19         }
20         //printf("command: %s\n",command);
21         //printf("command: %s\n",command);
22         int i;
23         for(i=0;i<COM_NUM;i++){
24             if(strncmp(coms[i],command,strlen(coms[i]))==0){
25                 func_ptrs[i](command);
26                 break;
27             }
28         }
29         if(i==COM_NUM){
30             printf("command not found.\n");
31         }
32     }
33     cd("C:/0");
34     ls(GLOBLE_PATH);
35     return 0;
36 }
//shell.h  1 #ifndef SHELL_H_INCLUDED
  2 #define SHELL_H_INCLUDED
  3 #include<io.h>
  4 #include<string.h>
  5 #include<stdio.h>
  6 #include<stdlib.h>
  7
  8 #define MAX_LENGTH_OF_PATH 256
  9 #define MAX_LENGTH_OF_USERNAME 50
 10 #define MAX_LENGTH_OF_COMMAND 50
 11 #define MAX_LENGTH_OF_LINE 256
 12 char GLOBLE_PATH[MAX_LENGTH_OF_PATH]= {‘C‘,‘:‘,‘/‘,‘0‘,‘\0‘};
 13 char USER_NAME[MAX_LENGTH_OF_USERNAME]= {‘g‘,‘u‘,‘e‘,‘s‘,‘t‘,‘\0‘};
 14 int login(char * command)
 15 {
 16     printf("user name:");
 17     char username[MAX_LENGTH_OF_USERNAME];
 18     gets(username);
 19     FILE * pwd;
 20     pwd = fopen ("pwd","r");
 21
 22     if (pwd!=NULL)
 23     {
 24         char line[MAX_LENGTH_OF_LINE];
 25         while (!feof(pwd))
 26         {
 27             if(fgets(line,MAX_LENGTH_OF_LINE,pwd)!=NULL)
 28             {
 29                 char * name=strtok(line," ");
 30                 //printf("%s\n",name);
 31                 if(strcmp(name,username)==0)
 32                 {
 33                     char password[MAX_LENGTH_OF_USERNAME];
 34                     printf("password:");
 35                     gets(password);
 36                     char * pasw=strtok(NULL," \n\r");
 37                     //printf("file password:%s\n",pasw);
 38                     if(strcmp(pasw,password)==0)
 39                     {
 40                         strcpy(USER_NAME,username);
 41                     }
 42                     else
 43                     {
 44                         printf("wrong password.\n");
 45                     }
 46                     fclose (pwd);
 47                     return 0;
 48                 }
 49             }
 50         }
 51         printf("user not exist.\n");
 52         fclose (pwd);
 53     }
 54     else
 55     {
 56         printf("login error.pwd file not exist or not able to open.\n");
 57     }
 58     return 0;
 59 }
 60 int shellexit(char * command)
 61 {
 62     exit(0);
 63     return 0;
 64 }
 65 int cat_file(char * file_path)
 66 {
 67     FILE* f=fopen(file_path,"r");
 68     if(f==NULL)
 69     {
 70         printf("file does not exist.\n");
 71         return -1;
 72     }
 73     char line[MAX_LENGTH_OF_LINE];
 74     while(!feof(f))
 75     {
 76         fgets(line,MAX_LENGTH_OF_LINE,f);
 77         for(int i=0;i<strlen(line);i++){
 78             if(line[i]==‘\0‘)break;
 79             printf("%c",line[i]);
 80         }
 81
 82     }
 83     printf("\n");
 84     return 0;
 85 }
 86 int cat(char * command)
 87 {
 88     char * path=strtok(command," ");
 89     path=strtok(NULL," ");
 90     //printf("path:%s",path);
 91     cat_file(path);
 92     return 0;
 93 }
 94
 95 int cd_path(char *path)
 96 {
 97     struct _finddata_t f;
 98     int p;
 99     //printf("1");
100     /* FILE * pFile;
101     pFile = fopen (path,"r");
102     if (pFile!=NULL)
103     {      printf("2");
104     }printf("3");*/
105     if((p=_findfirst(path, &f))!=-1)
106     {
107         //printf("%d",p);
108         //printf("2");
109         //printf(" %d ",f.attrib);
110         if(f.attrib&_A_SUBDIR)
111         {
112             //printf("4");
113             strcpy(GLOBLE_PATH,path);
114             return 0;
115         }
116         else
117         {
118             printf("destination path is not a folder.\n");
119         }
120     }
121     else
122     {
123         printf("destination not exist.\n");
124     }
125     return -1;
126 }
127
128 int cd(char * command)
129 {
130     char * path=strtok(command," ");
131     path=strtok(NULL," ");
132     //printf("path:%s",path);
133     cd_path(path);
134     return 0;
135 }
136
137 int ls_path(char * path)
138 {
139     struct _finddata_t f;
140     int p;
141     char name[MAX_LENGTH_OF_PATH];
142     strcpy(name,path);
143     strcat(name,"/*");
144     //printf("1");
145     if((p=_findfirst(name, &f))!=-1)
146     {
147         //read(p,filename,)
148         //printf("2");
149         printf(f.name);
150         printf("\n");
151         while(_findnext(p, &f)==0)
152         {
153             printf(f.name);
154             printf("\n");
155         }
156     }
157     else
158     {
159     }
160     return 0;
161 }
162 int ls(char * command)
163 {
164     char * path=strtok(command," ");
165     path=strtok(NULL," ");
166     //printf("path:%s",path);
167     if(path==NULL||strcmp(path,"")==0)
168     {
169         ls_path(GLOBLE_PATH);
170     }
171     else
172     {
173         ls_path(path);
174     }
175     return 0;
176 }
177 #endif // SHELL_H_INCLUDED

pwd文件内容:

ma 123456
xue 123456
wei 123456

时间: 2024-10-01 04:38:25

Shell(C++实现,CodeBlocks+GCC编译)的相关文章

简单的词法分析和语法分析(C++实现,CodeBlocks+GCC编译)

说明: 分析的语言是SNL语言,详见<编译程序的设计与实现>( 刘磊.金英.张晶.张荷花.单郸编著) 词法分析就是实现了词法分析的自动机 语法分析使用递归下降法 运行结果: 词法分析 得到TokenList 语法分析 输出语法树 运行输出: 代码: main.cpp 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<vector> 4 #include<string.h> 5 using na

俄罗斯方块(Win32实现,Codeblocks+GCC编译)

缘起: 在玩Codeblocks自带的俄罗斯方块时觉得不错,然而有时间限制.所以想自己再写一个. 程序效果: 主要内容: 程序中有一个board数组,其中有要显示的部分,也有不显示的部分,不显示的部分都存储1. 如下图: shape采用4*4数组(shape)保存.如: 0 0 0 0 0 1 0 0 1 1 1 0 0 0 0 0 另外用变量row和column保存shape数组左上角在board中的位置. 每次下落或左右移动,先对row和column做出改变,然后检测当前row和column

GLine游戏(Win32GUI实现,CodeBlocks+GCC编译)

//main.cpp 1 #if defined(UNICODE) && !defined(_UNICODE) 2 #define _UNICODE 3 #elif defined(_UNICODE) && !defined(UNICODE) 4 #define UNICODE 5 #endif 6 7 #include <tchar.h> 8 #include <windows.h> 9 #include "matrix.h"

Socket服务端和客户端(C++,CodeBlocks+GCC编译)

//main.cpp 1 #include "j_socket.h" 2 #include <stdio.h> 3 #include <pthread.h> 4 static int port=21; 5 j_server* ser; 6 void* main_listen( void* args) 7 { 8 ser=new j_server(port); 9 ser->j_listen(); 10 } 11 int main() 12 { 13 sta

抓鼠标的猫(Win32实现,Codeblocks+GCC编译)

//main.cpp 1 #include <windows.h> 2 #include <math.h> 3 //#include <iostream> 4 //using namespace std; 5 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; 6 double WIDTH=410,HEIGHT=430; 7 double px=0.0,py=0.0; 8 double ppx=0.0,ppy=

GCC 编译详解 (转)

朋友用C调用lua的库,但是不能直接调用源码,必须要编译成静态链接库才可以使用,问学长说是因为要分开编译链接.这就不理解了,于是转一篇讲编译的文章学习一下,补补课… GNU CC(简称为Gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C.C++和Object C等语言编写的程序.Gcc不仅功能强大,而且可以编译如C.C++.Object C.Java.Fortran.Pascal.Modula-3和Ada等多种语言,而且Gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种

Android上通过gcc编译普通的C程序

1.编译可执行程序 1.1 通过mk脚本编译 目录结构: mk_app jni main.c Android.mk Android.mk内容十分满简单: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:= main_exec LOCAL_SRC_FILES := main.c include $(BUILD_EXECUTABLE) 命令下,cd到jni的上一级目录,然后执行ndk-build命令: E:\GitHub

[转载]GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结

来自http://blog.csdn.net/benpaobagzb/article/details/51364005 GCC 编译使用动态链接库和静态链接库 1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有别于静态库,动态库的链接是在程序执行的时候被链接的.所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用.(TODO:链接动态库时链

GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结

GCC 编译使用动态链接库和静态链接库 1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有别于静态库,动态库的链接是在程序执行的时候被链接的.所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用.(TODO:链接动态库时链接阶段到底做了什么) 2 静态库和动态库的比较 链接静态库其实从某种意义上来说也是一种粘贴复制,只不过它操作的对象是目标