Я написал программу для linux, используя libxml2 для синтаксического анализа html. Хотя он выполняет свою работу, анализатор html записывает множество ошибок в stderr. Можно ли вообще отключить stderr (или перенаправить его на/dev/null, не выполняя его с помощью сценария перенаправления оболочки)? Я могу жить с необходимостью писать свои собственные ошибки в stdout, я просто хочу избавиться от этих ошибок.Можно ли отключить stderr в C++?
ответ
Используйте freopen для перенаправления устр/нуль:
freopen("/dev/null", "w", stderr);
См. Страницу руководства для функции pipe(2)
. Передайте ему STDERR и дескриптор/dev/null, и он должен работать.
эквив: NUL на окнах –
Вы можете перенаправить поток ошибок (в Баш, во всяком случае) из командной строки, как например:
./myProgram 2>/Dev/нуль
Что, что он специально не просил. –
Я не понял, что он подразумевал под «перенаправлением сценария оболочки». – Ambuoroko
freopen()
ing stderr
уже упоминалось, в котором рассматривается ваш конкретный вопрос. Но поскольку вы работаете с libxml2, вам может понадобиться более тонкий контроль над сообщениями об ошибках, а не просто перенаправление всех сообщений stderr категорически. Знаете, сообщения об ошибках есть по какой-то причине. См. libxml2 documentation о том, как использовать обработчики ошибок с помощью libxml2. Хорошей отправной точкой является xmlSetGenericErrorFunc()
Спасибо, я буду использовать его в будущем, но сейчас мне нужно быстрое решение, так что freopen будет делать это сейчас. – 2009-06-15 20:49:03
freopen (3) - это C-ориентированное решение (а не C++ в качестве заданного вопроса), и это просто удача, что заставляет его работать. Не работает работа. Это работает только тогда, когда файл дескриптор 2 закрыт и/dev/null открывается, он получает файловый дескриптор 2. В многопоточной среде это может завершиться неудачей. Вы также не можете гарантировать, что реализация freopen (3) сначала закрывает данный поток перед открытием нового файла. Это все предполагается, что вы не можете предположить, что libxml2 использует stdio C-style.
раствор А POSIX для этого является использование открытого (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);
- 1. Можно ли отключить буферизацию с помощью stdout и stderr?
- 2. 'tee' в makefile, можно ли скопировать stderr?
- 3. Можно ли отключить ключи в C++?
- 4. Как отключить $ stdout и $ stderr в Ruby
- 5. Можно ли отключить автозаполнение?
- 6. Можно ли отключить отрицательную индексацию?
- 7. Использование stderr в C
- 8. Можно ли отключить setlocale() в процессе?
- 9. можно ли отключить автоматическое продвижение типа в Objective-C
- 10. Можно ли игнорировать атрибуты в C#? Или отключить их обработку?
- 11. Можно ли отключить все границы?
- 12. Можно ли отключить просмотр-потерю?
- 13. Magento - Можно ли отключить Mage_Downloadable?
- 14. Можно ли отключить подсказку мыши?
- 15. Можно ли отключить commitEditingStyle программно?
- 16. Можно ли безопасно отключить таймер
- 17. Можно ли программно отключить iPhone?
- 18. Можно ли отключить предупреждения компилятора?
- 19. Можно ли отключить клиентский запрос?
- 20. Можно ли отключить подзапрос mysql?
- 21. Можно ли отключить кеш .ivy?
- 22. Отключить печать на stderr драйвером NVIDIA?
- 23. Когда использовать $ stderr vs STDERR в Ruby?
- 24. Можно ли отключить View Controllers, управляемый UINavigationController?
- 25. C: Перенаправить вывод системы() в stderr
- 26. Можно ли отключить загрузку в zkoss?
- 27. Можно ли отключить бесконечную прокрутку в UIDatePicker?
- 28. Можно ли отключить горизонтальную прокрутку в списке?
- 29. Можно ли отключить сканирование taglib в Tomcat?
- 30. Можно ли отключить функцию browserCaps в ASP.NET?
Ударьте меня на 10 секунд! –