Действительно ли возможно отключить stderr в C++?

Вы также можете использовать ForMember (), который имеет дополнительное преимущество, заключающееся в прохождении стандартного модульного теста Mapper.AssertConfigurationIsValid (), когда свойства, для которых заданы значения, отсутствуют в исходном объекте.

вот пример

Mapper.CreateMap<ClientData, GenerateClientLetterCommand>()
            .ForMember(x => x.Id, opt => opt.MapFrom( o => Guid.NewGuid()))
            .ForMember(x => x.Created, opt => opt.MapFrom( o => DateTime.Now));
5
задан 15 June 2009 в 20:18
поделиться

5 ответов

Используйте freopen для перенаправления на dev / null:

freopen("/dev/null", "w", stderr);
18
ответ дан 18 December 2019 в 05:23
поделиться

freopen () ing stderr уже упоминалось, что касается вашего конкретного вопроса. Но поскольку вы работаете с libxml2, вам может потребоваться более детальный контроль сообщений об ошибках, а не просто перенаправление всех сообщений stderr категорически. Вы знаете, что сообщения об ошибках появляются не просто так. См. документацию libxml2 о том, как использовать обработчики ошибок с libxml2. Хорошей отправной точкой является xmlSetGenericErrorFunc ()

14
ответ дан 18 December 2019 в 05:23
поделиться

См. Страницу руководства для функции pipe (2) . Передайте ему STDERR и дескриптор в / dev / null, и он должен работать.

0
ответ дан 18 December 2019 в 05:23
поделиться

freopen (3) - это C-ориентированное решение (а не C ++, как задается вопрос), и это просто удача заставляет его работать. Не указано на работу. Это работает только потому, что, когда файловый дескриптор 2 закрыт и / dev / null открыт, он получает файловый дескриптор 2. В многопоточной среде это может не работать. Вы также не можете гарантировать, что реализация freopen (3) сначала закроет данный поток перед открытием нового файла. Все это предполагает, что вы не можете предположить, что libxml2 использует stdio в стиле C.

Решение этой проблемы в POSIX - использовать open (2) и dup2 (2):

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

...

/* error checking elided for brevity */
int fd = ::open("/dev/null", O_WRONLY);
::dup2(fd, 2);
::close(fd);
6
ответ дан 18 December 2019 в 05:23
поделиться

Вы можете перенаправить stderr (в любом случае, в bash) из командной строки как таковой:

./ myProgram 2> / dev / null

0
ответ дан 18 December 2019 в 05:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: