OpenGroup POSIX.1-2001 определяет strerror_r, а также Стандартная базовая спецификация Linux 3.1.. Но я не могу найти ссылку на максимальный размер, который можно было бы разумно ожидать для сообщения об ошибке. Я ожидал, что некоторые определите где-нибудь, что я могу поместить в свой код, но нет никого, что я могу найти.
Код должен быть потокобезопасным. Вот почему strerror_r используется, а не страус.
Знает ли кто-нибудь символ, который я могу использовать? Я должен создать свой собственный?
Пример
int result = gethostname(p_buffy, size_buffy);
int errsv = errno;
if (result < 0)
{
char buf[256];
char const * str = strerror_r(errsv, buf, 256);
syslog(LOG_ERR,
"gethostname failed; errno=%d(%s), buf='%s'",
errsv,
str,
p_buffy);
return errsv;
}
Из документов:
Базовые спецификации Open Group Issue 6:
ОШИБКИ
Функция strerror_r() может выйти из строя, если:
- [ERANGE] Недостаточно места хранения было поставлено через strerrbuf и buflen до содержат сгенерированную строку сообщения.
Из источника:
Glibc-2.7/Glibc-2.7/строка/strerror.c: 41:
char *
strerror (errnum)
int errnum;
{
...
buf = malloc (1024);