LINUX.ORG.RU

вопрос по strerror и errno


0

0

вот в мане написанно что errno можно сформировать строку с помощью strerror а не ковырять по case'ам , char * который возвращает strerror нужно free после использования или нет?

anonymous

неа, strerror возвращает указатель на свой внутренний статический буффер(отсюда проблемы с thread-safety), strerror_r - использует тот буффер, который вы ей дали.

AnToXa
()
Ответ на: комментарий от AnToXa

> неа, strerror возвращает указатель на свой внутренний статический буффер(отсюда проблемы с thread-safety), strerror_r - использует тот буффер, который вы ей дали.

проблем с thread-safety для *strerror* нет. как класса.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

> проблем с thread-safety для *strerror* нет. как класса.

IMHO слишком категорично. Да, AFAIK у известных мне Unix-ов
проблем с strerror() я чота не припомню. Но такая реализация
с thread-safe проблемами вполне возможна, и тем не менее она
будет вполне соответствовать стандарту. Из SUSv3:

--- cut---
...
The string pointed to shall not be modified by the application, but may be overwritten by a subsequent call to strerror()or perror().
...
The strerror() function need not be reentrant. A function that is not
required to be reentrant is not required to be thread-safe.
...
--- cut---

Onanim
()
Ответ на: комментарий от Onanim

> string pointed to shall not be modified by the application, but may be overwritten by a subsequent call to strerror()or perror()

Ужасы какие. Значит кто-то додумался-таки до кривой реализации - ведь не так же просто появилась эти оговорки, и ведь не так же просто сделали функцию с буфером, приходящим снаружи.

anonymous
()
Ответ на: комментарий от Onanim

---cut--- The strerror() function need not be reentrant. A function that is not required to be reentrant is not required to be thread-safe. ---cut---

ну это отмазка на самый крайний случай :) впрочем, она внесена в стандарт значит так тому и быть.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от anonymous

---cut--- Ужасы какие. Значит кто-то додумался-таки до кривой реализации - ведь не так же просто появилась эти оговорки, и ведь не так же просто сделали функцию с буфером, приходящим снаружи. ---cut---

скорее всего это сделано в силу:

http://www.opengroup.org/onlinepubs/009695399/functions/strerror.html

---cut--- The contents of the error message strings returned by strerror() should be determined by the setting of the LC_MESSAGES category in the current locale. ---cut---

i.e. если делать локализованную версию strerror, то это уже не простой lookup в заранее сформированной и фиксированной таблице по индексу номера ошибки.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от AnToXa

пардон, как сказанное:

> неа, strerror возвращает указатель на свой внутренний статический буффер

..вяжется вот с:

> отсюда проблемы с thread-safety)

? что-то вы запутались с выводом :)

// wbr

klalafuda ★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.