是否有可能在C ++中禁用stderr?

我用libxml2编写了一个用于linuxparsing的程序。 虽然它的工作,HTMLparsing器写了很多错误到stderr。 是否有可能完全禁用stderr(或将其redirect到/ dev / null而不必使用redirectshell脚本运行)? 我可以生活在不得不写我自己的错误标准输出,我只是想摆脱这些错误。

Solutions Collecting From Web of "是否有可能在C ++中禁用stderr?"

使用freopen重定向到dev / null:

freopen("/dev/null", "w", stderr); 

freopen() ing stderr已经被提及,这解决了你的具体问题。 但是,由于您正在使用libxml2,您可能需要对错误消息进行更精细的控制,而不是仅将所有stderr消息明确地重定向。 错误信息是有原因的,你知道的。 请参阅libxml2文档 ,了解如何在libxml2中使用错误处理程序。 一个好的起点是xmlSetGenericErrorFunc()

freopen(3)是一个面向C的解决方案(不是C ++的问题),它只是运气,使它的工作。 它没有被指定工作。 它仅适用于文件描述符2关闭并打开/ dev / null时获取文件描述符2.在多线程环境中,这可能会失败。 你也不能保证在打开新文件之前freopen(3)的实现首先关闭给定的流。 这一切都假设你不能假定libxml2使用C风格的stdio。

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); 

请参阅pipe(2)功能的手册页。 把它传递给/ dev / null,它应该可以工作。

您可以从命令行重定向stderr(无论如何都是bash),例如:

./myProgram 2> / dev / null