2
的情況是如下:如何避免關閉dup2函數中的newfd?
某些線程調用fprintf(錯誤,...)來打印日誌,標準錯誤定向到一個日誌文件。
一個線程想要將stderr指向新文件。
但是,dup2(fd,2);標準錯誤將在dup2中關閉。打印到stderr的數據可能會丟失。 我不想在這裏使用互斥鎖。這種情況有沒有什麼好的解決方案。 謝謝。
的情況是如下:如何避免關閉dup2函數中的newfd?
某些線程調用fprintf(錯誤,...)來打印日誌,標準錯誤定向到一個日誌文件。
一個線程想要將stderr指向新文件。
但是,dup2(fd,2);標準錯誤將在dup2中關閉。打印到stderr的數據可能會丟失。 我不想在這裏使用互斥鎖。這種情況有沒有什麼好的解決方案。 謝謝。
每個線程不能有單獨的stderr
。文件描述符(和流)由進程中的所有線程共享。
您可以做的最好的是線程到輸出流(TLS)的映射,通常映射到stderr
。在你的線程中,打開另一個輸出流並使用它。
如果使用'fprintf'等stdio函數,則應該直接使用'freopen'而不是dup2。不,你不能針對不同的線程有不同的stderr。 – 2012-02-16 09:24:35