【发布时间】:2010-09-30 05:02:53
【问题描述】:
OpenGroup POSIX.1-2001 定义了strerror_r,The Linux Standard Base Core Specification 3.1 也是如此。但是我找不到对错误消息可以合理预期的最大大小的参考。我希望有一些定义可以放在我的代码中,但我找不到。
代码必须是线程安全的。这就是为什么使用 strerror_r 而不是 strerror。
有人知道我可以使用的符号吗?我应该创建自己的吗?
示例
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;
}
来自文档:
开放组基本规范第 6 期:
错误
如果出现以下情况,strerror_r() 函数可能会失败:
- [ERANGE] 通过 strerrbuf 和 buflen 提供的存储空间不足 包含生成的消息字符串。
来源:
glibc-2.7/glibc-2.7/string/strerror.c:41:
char *
strerror (errnum)
int errnum;
{
...
buf = malloc (1024);
【问题讨论】:
-
请注意,您可以使用
syslog和%m说明符(即POSIX-compliant)来代替strerror函数。示例:syslog(LOG_ERR, "Error occured, details: %m")。阅读syslog手册以了解更多信息。不幸的是,我不知道%m是否像strerror_r那样是线程安全的。
标签: c linux standards posix glibc