Я ищу решение для написания части программы на С++ в Linux, которая анализирует файл, содержащий программы с заданными аргументами, а затем запускает эти программы с их аргументами аргументов.
Каждая программа (строка) выполняется по одной, а затем родительский процесс ожидает выхода каждого дочернего элемента и проверяет его статус выхода (мне интересно, только если он равен 0).
Пример текста для разбора:
prog1 -a arg1 -m arg2 -c arg3 prog2 arg1 arg2 arg3 arg4 ....
Я считаю, что лучше всего хранить все в векторе строк, например:
vector <std::string> p_vector;
while (getline(file, line))
p_vector.push_back(line);
затем для каждого элемента i от 0 до p_vector.size() мне нужно сделать что-то вроде примера, который я нашел в сети:
if(fork() = 0) //? shouldn't here be == ?
{
execv(fullpath,argv);//does full path mean my p_vector[i]? or the child process and then argv is a list of space delimited arguments?
exit(1);
}
else
{
int *status;
wait(status);
if(*status == 0)
printf("%s exited correctly", fullpath);//fullpath, right?
else
//other printf error
}
или, мне лучше использовать для этого
string command = p_vector[i]; // eg: ls -l -a -l folder_one , put more arguments because I do not know the exact number of them for each parsed line
int exitCode = system(command.c_str());
Если у кого-то также есть идея, как это сделать с помощью скрипта, это тоже будет приветствоваться, хотя областью моего вопроса является C++!
Я мог бы использовать QProcess Qt, поскольку я знаю, как его использовать, но это может вызвать некоторые юридические проблемы, о которых я сейчас знаю (однако нет проблем с обменом кодом, компания, в которой я работаю, может не разрешить это)
Спасибо и с нетерпением жду ответов от вас!
==
- person unkulunkulu   schedule 31.07.2011