errno, _doserrno, _sys_errlist e _sys_nerr
Macros globais que mantêm códigos de erro definidos durante a execução do programa e equivalentes da cadeia de caracteres dos códigos de erro para exibição.
#define errno (*_errno()) #define _doserrno (*__doserrno()) #define _sys_errlist (__sys_errlist()) #define _sys_nerr (*__sys_nerr())
Comentários
errno e _doserrno são definidos como 0 no tempo de execução durante a inicialização do programa. errno é definido em um erro em uma chamada do sistema. Como errno contém o valor da última chamada que o define, esse valor pode ser alterado pelas chamadas subsequentes. As chamadas da biblioteca em tempo de execução que definem errno em um erro não limpam errno com êxito. Sempre desmarque errno chamando _set_errno(0) pouco antes de uma chamada que pode defini-lo e marque-o imediatamente depois da chamada.
Em um erro, errno não é necessariamente definido com o mesmo valor que o código de erro retornado por uma chamada do sistema. No caso de operações de E/S, _doserrno armazena os equivalentes de código de erro do sistema operacional dos códigos errno. No caso da maioria das operações de E/S, o valor de _doserrno não é definido.
Cada valor errno é associado a uma mensagem de erro em _sys_errlist, que pode ser impressa usando uma das funções perror ou armazenada em uma cadeia de caracteres com uma das funções strerror ou strerror_s. As funções perror e strerror usam a matriz _sys_errlist e _sys_nerr, o número de elementos em _sys_errlist, para processar informações de erro. O acesso direto a _sys_errlist e _sys_nerr é removido por motivos de segurança do código. Recomendamos que você use as versões funcionais, mais seguras, em vez das macros globais, como mostrado aqui:
Macro global |
Equivalentes funcionais |
---|---|
_doserrno |
|
errno |
|
_sys_errlist, _sys_nerr |
As rotinas matemáticas da biblioteca definem errno chamando _matherr. Para tratar erros de matemática de maneira diferente, grave sua própria rotina de acordo com a descrição da referência de _matherr e denomine-a _matherr.
Todos os valores errno na tabela a seguir são constantes predefinidas em <errno.h> e compatíveis com UNIX. Somente ERANGE, EILSEQ e EDOM são especificadas no padrão ISO C99.
Constante |
Mensagem de erro do sistema |
Valor |
---|---|---|
EPERM |
Operação não permitida |
1 |
ENOENT |
Arquivo ou diretório inexistente |
2 |
ESRCH |
Processo inexistente |
3 |
EINTR |
Função interrompida |
4 |
EIO |
Erro de E/S |
5 |
ENXIO |
Dispositivo ou endereço inexistente |
6 |
E2BIG |
Lista de argumentos muito longa |
7 |
ENOEXEC |
Erro de formato exec |
8 |
EBADF |
Número de arquivo incorreto |
9 |
ECHILD |
Nenhum processo gerado |
10 |
EAGAIN |
Não há mais processos ou não há memória suficiente ou nível de aninhamento 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 |
Arquivo existe |
17 |
EXDEV |
Vínculo de dispositivo cruzado |
18 |
ENODEV |
Dispositivo inexistente |
19 |
ENOTDIR |
Não é um diretório |
20 |
EISDIR |
É um diretório |
21 |
EINVAL |
Argumento inválido |
22 |
ENFILE |
Muitos arquivos abertos no sistema |
23 |
EMFILE |
Muitos arquivos abertos |
24 |
ENOTTY |
Operação de controle de E/S inadequada |
25 |
EFBIG |
Arquivo muito grande |
27 |
ENOSPC |
Nenhum espaço remanescente no dispositivo |
28 |
ESPIPE |
Pesquisa inválida |
29 |
EROFS |
Sistema de arquivos somente leitura |
30 |
EMLINK |
Muitos links |
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 anteriores do Microsoft C |
36 |
ENAMETOOLONG |
Nome de arquivo muito longo |
38 |
ENOLCK |
Não há bloqueios disponíveis |
39 |
ENOSYS |
Função sem suporte |
40 |
ENOTEMPTY |
Diretório não vazio |
41 |
EILSEQ |
Sequência ilegal de bytes |
42 |
STRUNCATE |
A cadeia de caracteres foi truncada |
80 |
Requisitos
Macro global |
Cabeçalho necessário |
Cabeçalho opcional |
---|---|---|
errno |
<errno.h> ou <stdlib.h>, <cerrno> ou <cstdlib> (C++) |
|
_doserrno, _sys_errlist, _sys_nerr |
<stdlib.h>, <cstdlib> (C++) |
<errno.h>, <cerrno> (C++) |
As macros _doserrno, _sys_errlist e _sys_nerr são extensões da Microsoft. Para obter mais informações de compatibilidade, consulte Compatibilidade.
Consulte também
Referência
strerror, _strerror, _wcserror, __wcserror