千家信息网

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

发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,这篇文章给大家分享的是有关C++如何实现模拟shell命令行的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、解析/** * 进行命令行解析: * 多个空格 * 分割符:<
千家信息网最后更新 2025年11月13日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命令行"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

0