Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设置守护进程C++的STDRR_C++_Linux - Fatal编程技术网

如何设置守护进程C++的STDRR

如何设置守护进程C++的STDRR,c++,linux,C++,Linux,我正在使用一些第三方库,它使用stderr来打印错误,并且它不会为日志记录提供任何回调。 我正在使用linux守护进程调用来创建进程的守护进程 是否有一种方法可以在后台程序调用后将stderr设置为file?使用开放系统调用打开文件,然后执行以下操作:dup2filefd,2。这将把stderr设置为打开的文件。然后可以关闭文件fd。您可以在调用守护进程之前打开,但我不建议在调用守护进程之前关闭dup2和后续关闭。使用开放系统调用打开文件,然后执行以下操作:dup2filefd,2。这将把std

我正在使用一些第三方库,它使用stderr来打印错误,并且它不会为日志记录提供任何回调。 我正在使用linux守护进程调用来创建进程的守护进程


是否有一种方法可以在后台程序调用后将stderr设置为file?

使用开放系统调用打开文件,然后执行以下操作:dup2filefd,2。这将把stderr设置为打开的文件。然后可以关闭文件fd。您可以在调用守护进程之前打开,但我不建议在调用守护进程之前关闭dup2和后续关闭。

使用开放系统调用打开文件,然后执行以下操作:dup2filefd,2。这将把stderr设置为打开的文件。然后可以关闭文件fd。您可以在调用守护进程之前打开,但我不建议在调用守护进程之前使用dup2和后续关闭。

在使用第三方库的代码中,您可以重新路由stderr流。 e、 g.类似于:

std::ofstream outputFileStream;
outputFileStream.open ("outputfile.txt");

std::streambuf * yourStreamBuffer = outputFileStream.rdbuf();
std::cerr.rdbuf(yourStreamBuffer);

std::cerr << "Ends up in the file, not std::cerr!";

outputFileStream.close();

在使用第三方库的代码中,可以重新路由stderr流。 e、 g.类似于:

std::ofstream outputFileStream;
outputFileStream.open ("outputfile.txt");

std::streambuf * yourStreamBuffer = outputFileStream.rdbuf();
std::cerr.rdbuf(yourStreamBuffer);

std::cerr << "Ends up in the file, not std::cerr!";

outputFileStream.close();

这取决于图书馆忠实地使用cerr。由于这个问题带有linux标签,我认为无论错误的库做什么,一个真正覆盖所有基础的操作系统特定的解决方案才是正确的选择。好的,这依赖于库忠实地使用cerr。由于这个问题带有linux标签,我认为无论错误的库做什么,都应该有一个覆盖所有基础的操作系统特定解决方案。如果该第三方库是自由软件,您可以将其源代码修补为使用syslog并发布修补程序以将其推向上游。如果该第三方库是自由软件,您可以使用syslog对其源代码进行修补,并发布修补程序将其推向上游。