errno, _doserrno, _sys_errlist e _sys_nerr
Essas variáveis globais mantém os códigos de erro usados pelo perror e strerror funções para imprimir mensagens de erro.Versões mais seguras funcionais listadas nesta tabela deve ser usada no lugar de sua variável global.
Variável global |
Equivalentes funcionais |
---|---|
_doserrno |
|
_errno |
Essas variáveis são declaradas em STDLIB.H como
extern int _doserrno;
extern int errno;
extern char *_sys_errlist[ ];
extern int _sys_nerr;
Comentários
errnoe _errno estão conectados à mesma variável.errnoé definido com o código#define errno (*_errno())
errnoé definida em um erro em uma chamada de nível de sistema.Porque errno o valor para a última chamada que defini-la, esse valor pode ser alterado por chamadas de sucesso de suspensões.Sempre verifique errno imediatamente antes e após uma chamada que pode defini-la.
Em um erro, errno não está necessariamente definido para o mesmo valor que o código de erro retornado por uma chamada de sistema.Para operações de i/O, use _doserrno para acessar os equivalentes de código de erro do sistema operacional de errno códigos.Para a maioria das operações de I/O não o valor de _doserrno é indefinido.
Cada errno valor está associado uma mensagem de erro que pode ser impressos usando perror ou armazenado em uma seqüência de caracteres com strerror.perrore strerror usar o _sys_errlist matriz e _sys_nerr, o número de elementos em _sys_errlist, para processar informações de erro.
Conjunto de rotinas de matemática de biblioteca errno chamando _matherr.Para manipular erros de matemática de uma forma diferente, escrever sua própria rotina de acordo com o _matherr referência a descrição e o nome de _matherr.
Todos os errno valores, definidos como constantes predefinidas na ERRNO.H, são compatíveis com o UNIX e são listados abaixo.Somente ERANGE, EILSEQ e EDOM são especificados no padrão ANSI.
Constante |
Mensagem de erro do sistema |
Valor |
---|---|---|
EPERM |
Operação não permitida |
1 |
ENOENT |
Não há tal arquivo ou diretório |
2 |
ESRCH |
Processo inexistente |
3 |
EINTR |
Função interrompida |
4 |
EIO |
Erro de e/S |
5 |
ENXIO |
Não há tal dispositivo ou endereço |
6 |
E2BIG |
Lista de argumentos muito longa |
7 |
ENOEXEC |
Erro de formato de EXEC |
8 |
EBADF |
Número de arquivo incorreto |
9 |
ECHILD |
Não há processos de reprodução |
10 |
EAGAIN |
Não há mais processos ou nível de aninhamento não há memória ou no máximo atingido |
11 |
ENOMEM |
Não há memória suficiente |
12 |
EACCES |
Permissão negada |
13 |
EFAULT |
Endereço incorreto |
14 |
EBUSY |
Dispositivo ou recurso ocupado |
16 |
EEXIST |
O arquivo existe |
17 |
EXDEV |
Referência cruzada de dispositivo |
18 |
ENODEV |
Nenhum dispositivo desse tipo |
19 |
ENOTDIR |
Não é um diretório |
20 |
EISDIR |
É um diretório |
21 |
EINVAL |
Argumento inválido |
22 |
ENFILE |
Número excessivo de arquivos abertos no sistema |
23 |
EMFILE |
Muitos arquivos abertos |
24 |
ENOTTY |
Operação inadequada de controle de e/S |
25 |
EFBIG |
Arquivo muito grande |
27 |
ENOSPC |
Não há espaço no dispositivo |
28 |
ESPIPE |
Busca inválida |
29 |
EROFS |
Sistema de arquivos somente leitura |
30 |
EMLINK |
Há muitos vínculos |
31 |
EPIPE |
Pipe interrompido |
32 |
EDOM |
Argumento matemático |
33 |
ERANGE |
Resultado muito grande |
34 |
EDEADLK |
Ocorreria um deadlock de recursos |
36 |
EDEADLOCK |
Mesmo que EDEADLK para compatibilidade com versões mais antigas do Microsoft C |
36 |
ENAMETOOLONG |
Nome de arquivo muito longo |
38 |
ENOLCK |
Bloqueios não disponíveis |
39 |
ENOSYS |
Função não aceita |
40 |
ENOTEMPTY |
Pasta não está vazia |
41 |
EILSEQ |
Seqüência de byte ilegal |
42 |
STRUNCATE |
Seqüência de caracteres foi truncada. |
80 |