如果我有一个字符串向量,如何使用带execvp的字符串来执行命令

If I have a vector of strings, how I can use the strings with execvp to execute a command?

本文关键字:字符串 execvp 执行 命令 有一个 向量 如果 何使用      更新时间:2023-10-16

我正在处理一项任务,在该任务中我将创建自己的命令shell。我已经正确地将我的输入字符串标记为多个字符串。我正试图弄清楚如何将这些字符串与execvp一起使用。

这个想法是,如果我有一个像这样的向量:

vector<string> s;
s[0] = "ls";
s[1] = "-a";
s[2] = "-l";

我希望能够使用execvp运行命令ls -a -l

我想使用c_str()将字符串转换为const char *,因为我认为execvp接受const char *,但这对我来说不起作用

我该怎么做?

感谢大家的帮助和反馈!真的很感激。

使用execvp,您需要一个char*指针数组作为第二个参数。我会这样做:

  1. 创建选项
  2. 制作指针的矢量
  3. 直接使用矢量数据

代码为:

char cmd[] = "ls";
char p1[] = "-l";
char p2[] = "-a";
vector<char*> parameters;
parameters.push_back(p1);
parameters.push_back(p2);

execvp(cmd, parameters.data());

由于std::vector::data()是c++11的特性,所以只有在c++11编译器可用的情况下才能使用std::vector::data()。要使用c+11编译器,请将-std=c++11添加到编译选项中。

希望这能帮助

我想我想通了。

我创建了一个函数,它以strings的向量作为输入,并输出char *的向量。

vector<char *> stringToChar(vector<string> s){
    vector<char *> c;
    for(int i = 0; i < s.size(); ++i){
        char *str;
        str = new char[s[i].size() + 1];
        memcpy(str, s[i].c_str(), s[i].size() + 1);
        c.push_back(str);
    }
    return c;
}