我正在使用一些第三方庫使用stderr來打印錯誤,並且它沒有給出任何記錄回調。 我使用linux daemon
調用來創建進程的守護進程。如何爲守護進程設置stderr C++
有沒有一種方法可以在守護進程調用後設置stderr文件?
我正在使用一些第三方庫使用stderr來打印錯誤,並且它沒有給出任何記錄回調。 我使用linux daemon
調用來創建進程的守護進程。如何爲守護進程設置stderr C++
有沒有一種方法可以在守護進程調用後設置stderr文件?
使用系統調用open
打開文件,然後執行以下操作:dup2(filefd, 2)
。這會將stderr
設置爲打開的文件。然後您可以close(filefd)
。在致電daemon
之前,您可以執行open
,但在撥打daemon
之後,我不會推薦dup2
和後續close
。
在使用第三方庫的代碼中,您可以「重新路由」stderr流。
例如例如:
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'標記,我認爲一個操作系統特定的解決方案實際上涵蓋了所有的基礎,而不管錯誤的庫是如何做的。 – Omnifarious
如果該第三方庫是免費軟件,則可以修補其源代碼以使用'syslog'併發布補丁以將其推送到上游。 –