Могу ли я глобально перенаправить вывод системных вызовов? - PullRequest
1 голос
/ 26 января 2011

У меня есть программа, которая выполняет различные команды оболочки через system() и иногда печатает в cout.Я хочу перенаправить весь вывод, поступающий от вызовов system(), в файл журнала, чтобы они не загромождали обычный вывод.Могу ли я сделать это без добавления > log ко всем системным командам?

Ответы [ 4 ]

4 голосов
/ 26 января 2011

Похоже, вы можете использовать popen

2 голосов
/ 26 января 2011

Использование system - просто плохая идея, точка.Если вы используете fork и execve или posix_spawn, вы можете легко сделать необходимые перенаправления и избежать всевозможных уязвимостей из-за проблем с цитированием оболочки.

2 голосов
/ 26 января 2011

Закройте дескрипторы файлов stdio (0, 1 и 2) и снова откройте их на любом устройстве вывода.

0 голосов
/ 26 января 2011

Если вы можете использовать библиотеку, которая переносит вызов процесса. Трудно кодировать из posix. Я использую boost.process , он отлично работает. Вы можете просто указать lib, как вы хотите, чтобы вывод был перенаправлен ...

my2c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...