LINUX.ORG.RU

Как программно перенаправить stderr в stdout?


0

0

Мне нужно, чтобы запускаемый via fork()&execv() процесс отправлял свой
stderr в свой же stdout. Вот как это делается? fdout, fdin - пайпы,
концы которых у родителя, то правильно ли это:

if((pid=fork())==0) { // child
    unistd.dup2(fdout[1], 1);
    unistd.dup2(fderr[1], 1);
    ..........
    execv(...);
}

?

Большое спасибо за любые советы.

anonymous

> unistd.dup2(fdout[1], 1);
> unistd.dup2(fderr[1], 1);

1-я строка не имеет смысла, т.к. вторая всё равно перенаправит 1-й дескриптор в fderr. Кроме того, неплохо бы закрывать все лишние дескрипторы.

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от watashiwa_daredeska

Нет, лишние, конечно, я закрываю. Но вот по поводу вопроса. Мне нужно перенаправить stdout И stderr в один и тот же пайп. Как же это сделать?

anonymous
()
Ответ на: комментарий от anonymous

> stdout И stderr в один и тот же пайп

Сначала выбрать, в какой :) Например, в fdout:

dup2( fdout[1], 1 ); /* Перенаправление stdout */
dup2( fdout[1], 2 ); /* Перенаправление stderr */

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от watashiwa_daredeska

Точно, я глупый :) Большое спасибо!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.