# A Biblioteca C GNU/Mensagens de erro

A biblioteca possui funções e variáveis projetadas para tornar fácil para seus programas reportarem mensagens de erro informativas em formato padronizado a respeito da falha de uma chamada de biblioteca. As funções strerror e perror dão à você uma mensagem de erro padrão para um determinado código de erro; a variável program_invocation_short_name dá à você acesso conveniente ao nome do programa que encontrou o erro.

### A Função: char *strerror(int errnum)

Esta função recebe um número inteiro que contém o código de algum erro. Normalmente, o que é passada para esta função é a variável errno vista anteriormente. Após receber um número inteiro, a função retorna um ponteiro para uma string que possui uma descrição rápida do erro que aconteceu.
Você não deve tentar alterar o valor da string retornada. Evite realizar múltiplas chamadas sucessivas à função strerror, pois isso pode sobrescrever a string. (Não se preocupe, pois nenhuma outra função de biblioteca chama esta função. Você é o único que pode chamá-la).
Caso nada tenha dado de errado no sistema, a string retornada pela função é "Sucess". Caso contrário, será outra mensagem dizendo uma descrição rápida do erro.
Esta função é declarada em string.h.

#### Exemplos de Uso

O editor de textos Emacs possui uma função própria chamada emacs_strerror. Esta função é implementada com a ajuda da função strerror da Biblioteca C GNU:

### A Função: char *strerror_r(int errnum, char *buf, size_t n)

Esta função funciona assim como strerror, mas ao invés de retornar a mensagem de erro em um buffer alocado estaticamente compartilhado por todas as linhas de execução de um processo, ela retorna uma cópia privada para a linha de execução. Esta, pode ser tanto algum dado global permanente ou uma string de mensagem no buffer fornecido pelo usuário começando no endereço buf e que possui um tamanho de n bytes.
No máximo, n caracteres são escritos (incluindo o bite "\0"), então você deve passar como argumento um buffer grande o bastante.
Esta função deve sempre ser usada em programas com várias linhas de execução, já que não há garantias de que a string retornada por strerror realmente pertença à última chamada da linha de execução atual.
Esta função é declarada em string.h.

#### Exempos de Uso

O seguinte exemplo aparece no código usado por vários comandos básicos do Linux, como "cat", "cut", etc.

### A Função: void perror(const char *message)

Esta função imprime uma mensagem de erro na saída de erros stderr. A orientação de stderr não pode ser mudada para outra saída.
Se você chamar perror com uma mensagem que é um ponteiro nulo ou uma string vazia, perror apenas imprime na tela uma mensagem correspondente ao valor de errno, adicionando uma quebra de linha.
Se você fornecer para a função uma mensagem não nula como argumento, então perror imprime a sua mensagem antes da mensagem de erro padrão, colocando um ":" para separá-las.
A mensagem impressa é exatamente a mesma mensagem que é retornada por strerror. O conteúdo da mensagem pode variar dependendo do sistema. Nos sistemas GNU, as mensagens são sempre curtas, ocupam uma única linha, começam com uma letra maiúscula e não possuem nenhuma pontuação.
Esta função é declarada em stdio.h.

#### Exemplos de Uso

O exemplo abaixo foi retirado do código-fone do Emacs: