IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++简单的shell -> 正文阅读

[C++知识库]C++简单的shell

简简单单的一个shell,编程语言:c++,功能长未完善,懂哥可以评论帮助一下。
目前可以正常编译使用。

//Readme
//项目名:LGFShell-Little Gold Fish's Shell
//3239215285@qq.com
//半成品,但能基本使用,如果有懂哥,欢迎来评论区完善
//缺点:没有像其他shell的内置命令,例如cd
//优点:体积小,编译快,运行快,环境不复杂,不使用make也能正常编译
//QAQ区:
//Q1:为什么不直接把string转成char然后用system()函数?
//A1:为了更好的拓展性
//Q2:可以正常使用吗?
//A2:已经实现了其他shell至少50%的功能,要求不过分的话就能使用
//Q3:为什么有那么多被注释掉的代码?
//A3:都是一些模仿shell的功能,但因为有问题,所以先注释掉,懂的人可以自己去摸索并完善功能
//Q4:我看不懂代码该怎么办?
//A4:我已经尽量写了注释来解释代码了,如果还看不懂,可以通过上面的联系方式问作者
//
#include <iostream>
#include <string>
#include <cstdlib>
#include <cstring>
#include <sys/wait.h>
#include <sys/types.h>
using namespace std;

void recommand(string str);
void runcommand(string str, string parm);
void shell_command(string str, string parm);

int main()
{
	/*const char *pw_name;//获取linux用户名
	string s1(pw_name, pw_name + strlen(pw_name));*/
	string str;
	for (;;)
	{
		char *getcwd(char *buf, size_t size);
		//char *getcwd( char *buffer, int maxlen );//获取当前路径
		//cout << s1 << "@LGFShell>";
		cout << "@LGFShell>";
		getline(cin, str);//输入命令
		recommand(str);//重新组合命令
	}
	return 0;
}
void recommand(string str)
{
	//该函数将输入的字符分开成命令和参数
	string parm;//命令参数
	int n1 = 0;
	int n2 = 1;
	char ch = ' ';
	for (;;)
	{
		if (strstr(str.c_str(), " ") == NULL)//防止输入的命令后面没有空格导致程序进入死循环
			break;
		if (str[n2] != ch)
		{
			n1 += 1;
			n2 += 1;
		}
		else
		{
			parm = str.substr(n1);
			str = str.replace(n1, 100, "");
			break;
		}
	}
	runcommand(str, parm);//执行命令
}
void runcommand(string str, string parm)
{
	/*if (str == "cd"){//响应cd命令
		str = str + parm;
		const char *c = str.data();
		cout << c;
		system(c);
		return;
	}*/
	int ret = 0;//声明返回值
	str = "/bin/" + str + parm;//合成命令和参数
	const char *p = str.data();
	ret = system(p);//获取system()函数的返回值
	if (ret = 32512)//响应未找到命令的返回值
	{
		cout << "Command not found, trying to run command as a shell command." << endl;
		//shell_command(str, parm);
	}
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-15 11:36:23  更:2021-10-15 11:36:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:42:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码