The Linux Standard Base Core Specification 3.1と同様に、OpenGroup POSIX.1-2001 はstrerror_rを定義しています。しかし、エラー メッセージに合理的に期待できる最大サイズへの参照が見つかりません。コードに配置できる定義がどこかにあることを期待していましたが、見つけることができるものはありません。
コードはスレッドセーフである必要があります。これが、strerror ではなく 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;
}
ドキュメントから:
オープン グループ基本仕様第 6 号:
エラー
strerror_r() 関数は、次の場合に失敗する可能性があります:
- [ERANGE]生成されたメッセージ文字列を格納するには、strerrbuf および buflen によって提供されたストレージが不十分でした。
ソースから:
glibc-2.7/glibc-2.7/string/strerror.c:41:
char *
strerror (errnum)
int errnum;
{
...
buf = malloc (1024);