Я пытаюсь сделать что-то вроде этого:Это неправильный способ перенаправления вывода ребенка, порожденного fork и execvp?
int main(int argc, char** argv)
{
bool foo = false;
//parse args, check if --foo is an arg, if so mark foo true
if (foo)
{
//child behavior
while (true) { std::cout << "child" << std::endl; sleep(1); }
}
else
{
//do some parent process stuff
pid_t pid = fork();
if(pid == 0) //spawn child
{
char* newArgv[argc+1];
for (int i = 0; i < argc; ++i) newArgv[i] = argv[i];
newArgv[argc] = "--foo"; //make child run child code
std::ostringstream oss;
oss << argv[0] << " >> foo.txt 2>&1"; //same binary but redir child output
execvp(out.str().c_str(), newArgv);
}
//more regular parent code
}
return 0;
}
Таким образом, в основном, бинарные нерестится себя с новым аргументом для запуска по-другому, и вывод перенаправляется (в идеале). К сожалению, в то время как это порождает два процесса, я, кажется, теряю выход ребенка, и я не уверен, почему?
Да, это неправильно. Операторы перенаправления обрабатываются оболочкой, и вы не выполняете оболочку. – youdontneedtothankme