Я работаю над заданием, в котором я создаю свою собственную командную оболочку. Я правильно разложил свою входную строку на несколько строк. Я пытаюсь выяснить, как использовать эти строки с execvp.
Идея в том, что если у меня есть такой вектор:
vector<string> s;
s[0] = "ls";
s[1] = "-a";
s[2] = "-l";
Я хочу иметь возможность запустить команду ls -a -l
используя execvp.
Я думал об использовании 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 доступен с std::vector::data()
это особенность C ++ 11. Чтобы использовать компилятор 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;
}