Quelle taille dois-je prévoir pour strerror_r?

La OpenGroup POSIX.1-2001 définit strerror_r, comme le fait Le Linux Standard Base Des Spécifications 3.1. Mais je ne peux trouver aucune référence à la taille maximale que pouvait raisonnablement attendre d'un message d'erreur. Je m'attendais à quelque définir quelque part que je pourrais mettre dans mon code, mais il n'en est aucun que je peux trouver.

Le code doit être thread-safe. C'est pourquoi strerror_r est utilisé et pas strerror.

Croit-on savoir le symbole que je peux utiliser? Je dois-je créer mon propre?


Exemple

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;
}

De documents:

Le Groupe De Base Des Spécifications Question 6:

ERREURS

La strerror_r() la fonction peut échouer si:

  • [ERANGE] de stockage Insuffisant a été fourni via strerrbuf et buflen à
    contenir le message généré chaîne.

À partir de la source:

glibc-2.7/glibc-2.7/string/strerror.c:41:

    char *
    strerror (errnum)
         int errnum;
    {
        ...
        buf = malloc (1024);
  • Notez qu'au lieu d'utiliser strerror de la fonction, vous pouvez utiliser syslog avec %m spécificateur (qui est POSIX-compliant). Exemple: syslog(LOG_ERR, "Error occured, details: %m"). Lire syslog manuel pour en savoir plus. Malheureusement, je ne sais pas si %m est thread-safe comme strerror_r est.
InformationsquelleAutor mat_geek | 2009-01-08