# 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.
Operação não permitida. Somente o proprietário do arquivo ou recurso que seu programa tenta acessar pode realizar a operação.
Seu programa está tentando manipular um arquivo ou diretório inexistente.
Seu programa está procurando por um ID de processo inexistente.
Chamada de função interrompida; um sinal assíncrono ocorreu e impediu a finalização da chamada. Quando isto ocorre, você deve tentar novamente.
Erro de entrada/saída; geralmente ocorre quando seu programa falha ao ler ou escrever em dispositívos físicos.
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.
A lista de argumentos foi muito longa. Ela está ocupando memória demais. Isto nunca ocorre em sistemas GNU.
Formato de arquivo executável inválido.
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.
Seu programa tentou encontrar um processo-filho inexistente.
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.
Nenhuma memória disponível. O sistema não pode alocar mais memória virtual, pois a sua capacidade está lotada.
Permissão negada. Seu programa não tem permissão de realizar o que estava tentando.
Endereço errado. Um ponteiro inválido foi detectado. Em sistemas GNU, isto nunca acontece; você recebe um sinal ao invés disso.
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.
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.
Seu programa esperava que determinado arquivo não existisse, mas ele existe.
Uma tentativa de realizar um link impróprio entre arquivos foi detectada. Ocorre quando você usa links ou quando renomeia um arquivo.
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.
Seu programa tentou lidar com um arquivo que deveria ser um diretório, mas era um arquivo normal.
O arquivo que seu programa tentou usar deveria ser um arquivo normal, mas é um diretório.
Argumento inválido foi passado para um programa ou função.
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
Exites muitos arquivos diferentes abertos em todo o seu sistema. Este erro nunca ocorre em sistemas GNU.
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.
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.
O arquivo é grande demais. Ele provavelmente é maior do que é permitido pelo sistema.
Nenhum espaço disponível no dispositivo. Impossível escrever nele.
Operação de busca inválida.
Foi feita uma tentativa de modificar algo em um sistema de arquivos somente leitura.
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.
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.
Erro de domínio. Isso ocorre quando uma função matemática recebe um argumento fora do domínio na qual ela está estabelecida.
Erro de alcance. Ele ocorre sempre que funções matemáticas não podem retornar o valor correto por causa de overflow ou underflow.
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:
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.
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.
Uma operação já está em progresso em um objeto que tem o modo sem-bloqueio ativado.
Um arquivo que não é um soquete foi especificado quando um soquete foi pedido.
O tamanho de uma mensagem enviada em um soquete foi maior do que o tamanho máximo suportado.
O tipo de soquete não suporta o protocolo de comunicações requisitado.
Você especificou uma opção de soquete que não faz sentido para o protocolo em particular que é usado por ele.
O domínio do soquete não suporta o protocolo de comunicação requisitado (talvez por ser um protocolo inválido).
O tipo de soquete não é suportado.
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.
A família de protocolo de comunicações do soquete não é suportada; 'inconsistente com o protocolo sendo usado no soquete.
A família de endereços especificada para um soquete não é suportada; é inconsistente com o protocolo sendo usado no soquete.
O endereço do soquete requisitado já está em uso.
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.
Uma operação com soquetes falhou porque a rede caiu.
Uma operação de soquete falhou porque a sub-rede contendo o servidor remoto tornou-se inacessível.
Uma conexão com a rede foi reiniciada porque o servidor remoto caiu.
Uma conexão de rede foi cancelada localmente.
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.
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.
Você tentou estabelecer conexão com um soquete já conectado.
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.
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.
O soquete já foi desligado.
Uma operação de soquete com tempo limitado não recebeu resposta durante o tempoo esperado.
Um servidor remoto recusou a permissão da conexão com a rede (normalmente porque ele não está rodando o serviço requerido).
Muitos níveis de links simbólicos foram encontrados ao se procurar por um arquivo. Isto normalmente indica um ciclo de links simbólicos.
O nome do arquivo ou do servidor é longo demais.
O servidor remoto de uma conexão à rede requerida caiu.
O servidor remoto de uma conexão à rede requerida está inacessível.
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