2012-11-05 43 views
1

我正在使用一些第三方庫使用stderr來打印錯誤,並且它沒有給出任何記錄回調。 我使用linux daemon調用來創建進程的守護進程。如何爲守護進程設置stderr C++

有沒有一種方法可以在守護進程調用後設置stderr文件?

+1

如果該第三方庫是免費軟件,則可以修補其源代碼以使用'syslog'併發布補丁以將其推送到上游。 –

回答

4

使用系統調用open打開文件,然後執行以下操作:dup2(filefd, 2)。這會將stderr設置爲打開的文件。然後您可以close(filefd)。在致電daemon之前,您可以執行open,但在撥打daemon之後,我不會推薦dup2和後續close

2

在使用第三方庫的代碼中,您可以「重新路由」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(); 
+0

那麼,這依靠圖書館忠實地使用'cerr'。由於這個問題有'linux'標記,我認爲一個操作系統特定的解決方案實際上涵蓋了所有的基礎,而不管錯誤的庫是如何做的。 – Omnifarious