Как избежать закрытия newfd в функции dup2? - PullRequest
2 голосов
/ 16 февраля 2012

Сценарий следующий:

  1. Некоторые потоки вызывают fprintf (stderr, ...) для печати журнала, stderr направляется в файл журнала.

  2. Один поток хочет направить stderr в новый файл.

Однако dup2 (fd, 2);stderr будет закрыт в dup2.Данные, напечатанные на stderr, могут быть потеряны.Я не хочу использовать мьютекс здесь.Есть ли хорошее решение для этого случая.Спасибо.

1 Ответ

1 голос
/ 16 февраля 2012

У вас не может быть отдельного stderr на поток.Файловые дескрипторы (и потоки) являются общими для всех потоков процесса.

Лучшее, что вы можете сделать, - это сопоставить поток с выходным потоком (TLS), который обычно отображается в stderr.В вашем потоке откройте другой поток вывода и используйте его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...