千家信息网

C++如何实现模拟shell命令行

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家分享的是有关C++如何实现模拟shell命令行的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、解析/** * 进行命令行解析: * 多个空格 * 分割符:<
千家信息网最后更新 2026年11月03日C++如何实现模拟shell命令行

这篇文章给大家分享的是有关C++如何实现模拟shell命令行的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一、解析

/** * 进行命令行解析: * 多个空格 * 分割符:< > | * */void parse(){    std::string line;    getline(std::cin, line);    /** 解析字符串 */    int len = line.size(), i=0;    std::string tmp;    std::vector tmp_vc;    while(i < line.size()){        if(line[i] == ' '){            i++;            continue;        }        if(line[i] == '|') {            vc.push_back(tmp_vc);            tmp = "";            i++;            continue;        }        int pos = line.find(' ', i);    // 获取下一个空格的位置        tmp = line.substr(i, pos-i);    // 截取字符串        tmp_vc.push_back(tmp);        i = pos;    }    vc.push_back(tmp_vc);}

二、执行命令函数

/** 执行命令子函数 */void func(std::vector& v){    char *arr[10];    pid_t pid;    pid = fork();    if(pid == -1){        std::cout << "fork error" << std::endl;        exit(1);    }else if(pid ==0){        for(int i=0; i <则将内容写入文件或者命令行 * */void execCommnd(){    for(int i=0; i

三、模拟shell

/** 获取当前所在目录 */void getCurPwd(){    std::string s = get_current_dir_name();    int pos  = s.rfind('/');    std::string tmp = s.substr(pos+1, s.length()-pos);    std::cout << tmp << "]# ";}/** 获取当前用户名 */void getIdname(){    struct  passwd *pwd;    pwd = getpwuid(getuid());    std::cout << "["  <pw_name << "@";}/** 获取当前主机名 */void getHostName(){    char buf_w[128];    int hostname = gethostname(buf_w, sizeof(buf_w));     std::cout << buf_w << " ";    }/** 显示菜单 */void showMenu(){    getIdname();    getHostName();    getCurPwd();}

四、完整代码

/*----------------------------------------------------------------------        > File Name: shellDemo.cpp        > Author: Jxiepc        > Mail: Jxiepc        > Created Time: Sun 19 Dec 2021 11:24:21 AM CST----------------------------------------------------------------------*/#include #include #include #include #include #include #include #include #include /* 存储命令以及参数 */std::vector> vc;/** * 进行命令行解析: * 多个空格 * 分割符:< > | * */void parse(){    std::string line;    getline(std::cin, line);    /** 解析字符串 */    int len = line.size(), i=0;    std::string tmp;    std::vector tmp_vc;    while(i < line.size()){        if(line[i] == ' '){            i++;            continue;        }        if(line[i] == '|') {            vc.push_back(tmp_vc);            tmp = "";            i++;            continue;        }        int pos = line.find(' ', i);                // 获取下一个空格的位置        tmp = line.substr(i, pos-i);    // 截取字符串        tmp_vc.push_back(tmp);        i = pos;    }    vc.push_back(tmp_vc);}/** 执行命令子函数 */void func(std::vector& v){    char *arr[10];    pid_t pid;    pid = fork();    if(pid == -1){        std::cout << "fork error" << std::endl;        exit(1);    }else if(pid ==0){        for(int i=0; i <则将内容写入文件或者命令行 * */void execCommnd(){    for(int i=0; ipw_name << "@";}/** 获取当前主机名 */void getHostName(){    char buf_w[128];    int hostname = gethostname(buf_w, sizeof(buf_w));     std::cout << buf_w << " ";    }/** 显示菜单 */void showMenu(){    getIdname();    getHostName();    getCurPwd();}void test(){    while(1){        showMenu();        parse();        execCommnd();    }}int main(int argc, char* argv[]){    test();    return 0;}

四、运行结果

感谢各位的阅读!关于"C++如何实现模拟shell命令行"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

命令 内容 字符 字符串 空格 函数 C++ 主机 位置 多个 所在 文件 更多 用户 用户名 目录 篇文章 菜单 不错 实用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 山东特亿宝互联网科技有限公司 鸠鸠互联网科技 易通互联网络科技有限公司 互联网 科技服务平台 开启互联网科技时代小说 深圳前海聚择互联网科技有限公司 中国互联网有什么科技含量 阿里互联网科技公司 广州恒生互联网科技有限 互联网科技与管理 岳阳华臻互联网科技有限公司 燊美集互联网科技有限公司 乌鲁木齐新华智原互联网科技学校 南博望互联网科技有限公司 张召忠谈中国互联网科技 领航科技大厦互联网公司 美国五大互联网科技公司市值多少 现代互联网科技公司 互联网金融金融科技 互联网科技快速发展优美句子 互联网 科技 天扬科技互联网广告 重庆科技学院互联网 镁科技互联网资讯平台 成都仁贤领冠互联网科技有限公司 来此购互联网科技有限公司 深圳无忧互联网科技 风投北京互联网科技 西安有哪些互联网高科技企业 互联网科技快速发展优美句子
0