A Biblioteca C GNU/Códigos de erros

Os códigos de erro são definidos no arquivo de cabeçalho errno.h. Todos eles representam valores inteiros constantes.Alguns destes códigos nunca podem ocorrer em sistemas GNU, mas podem ocorrer em outros sistemas que usam a biblioteca GNU.

  • Macro: int EPERM

Operação não permitida. Somente o proprietário do arquivo ou recurso que seu programa tenta acessar pode realizar a operação.

  • Macro: int ENOENT

Seu programa está tentando manipular um arquivo ou diretório inexistente.

  • Macro: int ESRCH

Seu programa está procurando por um ID de processo inexistente.

  • Macro: int EINTR

Chamada de função interrompida; um sinal assíncrono ocorreu e impediu a finalização da chamada. Quando isto ocorre, você deve tentar novamente.

  • Macro: int EIO

Erro de entrada/saída; geralmente ocorre quando seu programa falha ao ler ou escrever em dispositívos físicos.

  • Macro: int ENXIO

Dispositivo ou endereço inexistente. O sistema tentou utilizar um dispositivo representado por um arquivo que você especificou, mas não encontrou o dispositivo. Ele provavelmente foi instalado incorretamente, está ausente ou foi desconectado do computador.

  • Macro: int E2BIG

A lista de argumentos foi muito longa. Ela está ocupando memória demais. Isto nunca ocorre em sistemas GNU.

  • Macro: int ENOEXEC

Formato de arquivo executável inválido.

  • Macro: int EBADF

Descritor de arquivo errado. Isso acontece quando, por exemplo, você tenta abrir um arquivo em modo de leitura e escrita, sendo que ele só é disponível para leitura.

  • Macro: int ECHILD

Seu programa tentou encontrar um processo-filho inexistente.

  • Macro: int EDEADLK

Ocorreu um Deadlock. Ou seja, existe um processo que está aguardando o término de um segundo processo. Entrtanto o segundo processo é dependende do primeiro processo. Nem sempre o sistema é capaz de detectar Deadlocks. Se errno estiver com o valor desta macro, você teve sorte pelo seu sistema ter detectado a condição.

  • Macro: int ENOMEM

Nenhuma memória disponível. O sistema não pode alocar mais memória virtual, pois a sua capacidade está lotada.

  • Macro: int EACCES

Permissão negada. Seu programa não tem permissão de realizar o que estava tentando.

  • Macro: int EFAULT

Endereço errado. Um ponteiro inválido foi detectado. Em sistemas GNU, isto nunca acontece; você recebe um sinal ao invés disso.

  • Macro: int ENOTBLK

Seu programa esperava um arquivo de bloco especial, mas recebeu um arquivo comum. Isso acontece quando, por exemplo, alguém tenta montar um arquivo comum como se fôsse um sistema de arquivos.

  • Macro: int EBUSY

O recurso de sistema que seu programa estava tentando usar está ocupado e não pode ser compartilhado. Isso ocorre quando, por exemplo, alguém tenta deletar um diretório que é a raíz de um sistema de arquivos montado.

  • Macro: int EEXIST

Seu programa esperava que determinado arquivo não existisse, mas ele existe.

  • Macro: int EXDEV

Uma tentativa de realizar um link impróprio entre arquivos foi detectada. Ocorre quando você usa links ou quando renomeia um arquivo.

  • Macro: int ENODEV

Seu programa esperava receber o endereço de um determinado tipo de dispositivo, mas acabou recebendo um endereço que o levou a um dispositivo diferente.

  • Macro: int ENOTDIR

Seu programa tentou lidar com um arquivo que deveria ser um diretório, mas era um arquivo normal.

  • Macro: int EISDIR

O arquivo que seu programa tentou usar deveria ser um arquivo normal, mas é um diretório.

  • Macro: int EINVAL

Argumento inválido foi passado para um programa ou função.

  • Macro: int EMFILE

O processo atual possui muitos arquivos abertos e não pode abrir mais nenhum. Em BSD e GNU, o número de arquivos abertos é controlado por um limitador de recursos que pode normalmente ser incrementado. Se você receber este erro, você pode querer aumentar RLIMIT_NOFILE, ou deixá-lo ilimitado. Veja Limites em Recursos

  • Macro: int ENFILE

Exites muitos arquivos diferentes abertos em todo o seu sistema. Este erro nunca ocorre em sistemas GNU.

  • Macro: int ENOTTY

Controle de operação de entrada/saída imprópria. Isso ocorre quando, por exemplo, você tenta ajustar modos do terminal em um arquivo ordinário.

  • Macro: int ETXTBSY

Ocorreu uma tentativa de executar um arquivo aberto para escrita, ou escrever em um arquivo que está sendo executado. Freqüentemente usar um programa depurador causa este erro. Este não é considerado um erro em sistemas GNU.

  • Macro: int EFBIG

O arquivo é grande demais. Ele provavelmente é maior do que é permitido pelo sistema.

  • Macro: int ENOSPC

Nenhum espaço disponível no dispositivo. Impossível escrever nele.

  • Macro: int ESPIPE

Operação de busca inválida.

  • Macro: int EROFS

Foi feita uma tentativa de modificar algo em um sistema de arquivos somente leitura.

  • Macro: int EMLINK

Existem muito links. A contagem de links de um único arquivo tornou-se grande demais. Renomear um arquivo também pode causar isso se ele já tiver links demais.

  • Macro: int EPIPE

Pipe quebrado. Não existe nenhum processo lendo do outro lado de um pipe. Toda função de biblioteca que retorna este erro também gera um sinal SIGPIPE; que termina o programa se não for alterado ou bloqueado. Assim, seu programa jamias tem a chance de ver errno com o valor de EPIPE, a menos que o sinal tenha sido manipulado ou bloqueado.

  • Macro: int EDOM

Erro de domínio. Isso ocorre quando uma função matemática recebe um argumento fora do domínio na qual ela está estabelecida.

  • Macro: int ERANGE

Erro de alcance. Ele ocorre sempre que funções matemáticas não podem retornar o valor correto por causa de overflow ou underflow.

  • Macro: int EAGAIN

O recurso que seu programa busca está temporariamente indisponível; a chamada pode funcionar se você tentar novamente mais tarde. A macro EWOULDBLOCK é um outro nome para EAGAIN; elas representam o mesmo número na biblioteca C GNU. Este erro pode acontecer nas seguintes situações:

    • Uma operação de bloqueio foi detida por um objeto que tem um modo antibloqueio selecionado. Tentar a mesma operação novamente irá causar o bloqueio até que alguma condição externa tornar possível ler, escrever ou conectar (não importa a operação).
    • Uma diminuição temporária de recursos tornou uma operação impossível. Esta diminuição normalmente é temporária, mas é recomendável aguardar alguns segundos antes de tentar novamente, para que outros processos liberem os recursos. Tais diminuições são geralmente bastante sérias e afetam o sistema inteiro, então geralmente um programa interativo irá reportar o erro para o usuário e retornar ao seu loop de comandos.
  • Macro: int EWOULDBLOCK

Na biblioteca C GNU, este é outro nome para EAGAIN (acima). Os valores são sempre os mesmos em todos os sistemas operacionais. Bibliotecas C em muitos sistemas Unix antigos possuem mensagens de erro diferentes para EWOULDBLOCK.

  • Macro: int EINPROGRESS

Uma operação que não pode completar sua tarefa imediatamente foi iniciada em um objeto com o modo antibloqueio selecionado. Algumas funções que devem sempre bloquear nunca retornam EAGAIN. Ao invés disso, elas retornam EINPROGRESS para indicar que a operação começou e irá levar algum tempo. Tentativas de manipular o objeto antes da chamada se completar retornam EALREADY. Você pode usar a função select para descobrir quando a operação pendente será completada.

  • Macro: int EALREADY

Uma operação já está em progresso em um objeto que tem o modo sem-bloqueio ativado.

  • Macro: int ENOTSOCK

Um arquivo que não é um soquete foi especificado quando um soquete foi pedido.

  • Macro: int EMSGSIZE

O tamanho de uma mensagem enviada em um soquete foi maior do que o tamanho máximo suportado.

  • Macro: int EPROTOTYPE

O tipo de soquete não suporta o protocolo de comunicações requisitado.

  • Macro: int ENOPROTOOPT

Você especificou uma opção de soquete que não faz sentido para o protocolo em particular que é usado por ele.

  • Macro: int EPROTONOSUPPORT

O domínio do soquete não suporta o protocolo de comunicação requisitado (talvez por ser um protocolo inválido).

  • Macro: int ESOCKTNOSUPPORT

O tipo de soquete não é suportado.

  • Macro: int EOPNOTSUPP

A operação requisitada não é suportada. Algumas funções de soquete não fazem sentido para todos os tipos de soquete, e outras não podem ser implementadas para todos os protocolos de comunicação. Nos sistemas GNU, este erro pode ocorrer para muitas chamadas quando o objeto não suporta a operação usada; é uma indicação genérica que o servidor não sabe o que fazer com aquela chamada.

  • Macro: int EPFNOSUPPORT

A família de protocolo de comunicações do soquete não é suportada; 'inconsistente com o protocolo sendo usado no soquete.

  • Macro: int EAFNOSUPPORT

A família de endereços especificada para um soquete não é suportada; é inconsistente com o protocolo sendo usado no soquete.

  • Macro: int EADDRINUSE

O endereço do soquete requisitado já está em uso.

  • Macro: int EADDRNOTAVAIL

O endereço do soquete requisitado não está disponível; por exemplo, se você tentar dar a um soquete algum nome que não combina com o nome do servidor local.

  • Macro: int ENETDOWN

Uma operação com soquetes falhou porque a rede caiu.

  • Macro: int ENETUNREACH

Uma operação de soquete falhou porque a sub-rede contendo o servidor remoto tornou-se inacessível.

  • Macro: int ENETRESET

Uma conexão com a rede foi reiniciada porque o servidor remoto caiu.

  • Macro: int ECONNABORTED

Uma conexão de rede foi cancelada localmente.

  • Macro: int ECONNRESET

Uma conexão de rede foi fechada por motivos fora do controle do servidor local, como a reinicialização de uma máquina remota ou uma violação de protocolo irrecuperável.

  • Macro: int ENOBUFS

Os buffers do kernel para operações de entrada/saída estão todos ocupados. Em sistemas GNU, este erro é sempre sinônimo de ENOMEM; você pode receber um ou outro de operações de rede.

  • Macro: int EISCONN

Você tentou estabelecer conexão com um soquete já conectado.

  • Macro: int ENOTCONN

O soquete não está conectado à nada. Você recebe este erro quando tenta transmitir dados através de um soquete, sem primeiro especificar um destino para os dados. Para um soquete sem conexão (para protocolos datagrama, como UDP), você recebe EDESTADDREQ.

  • Macro: int EDESTADDRREQ

Nenhum endereço de destino padrão foi ajustado para o soquete. Você recebe este erro quando tenta transmitir dados através de um soquete sem conexão, sem primeiro especificar um destino para os dados com connect.

  • Macro: int ESHUTDOWN

O soquete já foi desligado.


  • Macro: int ETIMEDOUT

Uma operação de soquete com tempo limitado não recebeu resposta durante o tempoo esperado.

  • Macro: int ECONNREFUSED

Um servidor remoto recusou a permissão da conexão com a rede (normalmente porque ele não está rodando o serviço requerido).

  • Macro: int ELOOP

Muitos níveis de links simbólicos foram encontrados ao se procurar por um arquivo. Isto normalmente indica um ciclo de links simbólicos.

  • Macro: int ENAMETOOLONG

O nome do arquivo ou do servidor é longo demais.

  • Macro: int EHOSTDOWN

O servidor remoto de uma conexão à rede requerida caiu.

  • Macro: int EHOSTUNREACH

O servidor remoto de uma conexão à rede requerida está inacessível.

  • Macro: int ENOTEMPTY

Um diretório que esperáva-se estar vazio não está. Tipicamente, este erro ocorre ao tentar apagar um diretório.

Para uma lista ainda maior de erros possíveis, consulte a página oficial da biblioteca: http://www.gnu.org/software/libc/manual/html_node/Error-Codes.html#Error-Codes