如果我有一个字符串向量,如何使用带execvp的字符串来执行命令
If I have a vector of strings, how I can use the strings with execvp to execute a command?
我正在处理一项任务,在该任务中我将创建自己的命令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*
指针数组作为第二个参数。我会这样做:
- 创建选项
- 制作指针的矢量
- 直接使用矢量数据
代码为:
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;
}