2012-02-16 64 views
2

的情況是如下:如何避免關閉dup2函數中的newfd?

  1. 某些線程調用fprintf(錯誤,...)來打印日誌,標準錯誤定向到一個日誌文件。

  2. 一個線程想要將stderr指向新文件。

但是,dup2(fd,2);標準錯誤將在dup2中關閉。打印到stderr的數據可能會丟失。 我不想在這裏使用互斥鎖。這種情況有沒有什麼好的解決方案。 謝謝。

+0

如果使用'fprintf'等stdio函數,則應該直接使用'freopen'而不是dup2。不,你不能針對不同的線程有不同的stderr。 – 2012-02-16 09:24:35

回答

1

每個線程不能有單獨的stderr。文件描述符(和流)由進程中的所有線程共享。

您可以做的最好的是線程到輸出流(TLS)的映射,通常映射到stderr。在你的線程中,打開另一個輸出流並使用它。