В Linux у меня есть код на C ++, где я хочу запустить другое приложение. Эта программа выводит некоторые данные в stderr. Поэтому я перенаправляю stderr, вызывая freopen () с stderr в качестве параметра потока. Дело в том, что я хочу перенаправить stderr для другого запущенного процесса.
Вот сценарий, с которым я работаю. Я форк () текущий процесс; в дочернем процессе я перенаправляю stderr; тогда я execv (), чтобы запустить отдельное приложение.
Во-первых, у меня есть Sentry, настроенный для перенаправления вывода stderr. Вот код:
class StderrSentry {
public:
StderrSentry() {
freopen( "NUL", "wt", stderr );
}
~StderrSentry() {
fclose( stderr );
}
};
Далее в коде:
pid_t pid = fork();
int retval=-1;
if( pid < 0 ) {
success = false;
}
else if( ! pid ) { // child process
StderrSentry stdErrSentry; // REDIRECTING STDERR HERE!
pid_t chid = setsid();
if (chid == -1 ) {
exit(-1);
}
else {
// HERE IS THE execv() call:
if( execv(command[0].c_str(), const_cast<char**>(&c_args[0])) < 0 ) {
exit( -1 );
}
}
}
// ... else etc...
Будет ли перенаправление stderr фактически технически действительным, если вызов execv () заменит текущий процесс указанным?
Это на самом деле ведет себя так, как я хочу , но это случайность или это способ сделать это?
Я не могу активировать перенаправление stderr в приложении, которое выполняется в execv, поскольку это не мой код.
Спасибо за любую информацию по этому вопросу.