Compreender os códigos de erro no Linux

4

Estou trabalhando no laptop Linux (Kernel Version 2.6.32.28).
Depois que eu inseri / fiz o arquivo io / removi um cartão SD, recebi os seguintes erros:

mmcblk0: error -123 sending status command  
mmcblk0: error -123 sending read/write command, response 0x0, card status 0x0  
mmcblk0: error -123 sending requesting status 

Agora, eu gostaria de entender o que esses erros significam.

Como vi, alguns códigos de erro padrão estão localizados em arch / powerpc / boot / stdio.h e outros espalhados em vários outros lugares.

Existe alguma maneira sistemática no Linux para rastrear (e entender) os códigos de erro (na fonte)?

    
por TheCottonSilk 28.02.2011 / 08:02

4 respostas

6

Existem valores de erro padrão, definidos em errno.h . Você pode ver este arquivo em seu sistema para ver os valores numéricos. Na maioria dos sistemas, eles estão em /usr/include/errno.h ou em um arquivo incluído. No Linux, a maioria está em /usr/include/asm-generic/errno-base.h ou /usr/include/asm-generic/errno.h , com mais alguns em /usr/include/bits/errno.h .

Se você tiver um valor numérico, chame a função de biblioteca padrão strerror ou < href="http://pubs.opengroup.org/onlinepubs/009695399/functions/perror.html"> perror para obter a mensagem de erro correspondente (em sua localidade atual). Na linha de comando, uma maneira rápida de ver uma string de erro é uma das

perl -MPOSIX -le 'print strerror 123'
python -c 'import os; print os.strerror(123)'
zmodload zsh/system; syserror 123  # in zsh
    
por 28.02.2011 / 22:30
7

No shell, você pode executar perror :

$ perror 123
OS error code 123:  No medium found

Isso vem com o MySQL.

Se você não tem o MySQL, você pode usar Perl ou Python, por exemplo:

$ perl -MPOSIX -e 'print strerror(123)'
No medium found

$ python -c 'import os; print os.strerror(123)'
No medium found

Em um programa em C, você pode usar a função com o mesmo nome:

void perror(const char *s);

Imprime sua mensagem s com o motivo do erro anexado.

Ou você pode usar:

char *strerror(int errnum);

para retornar a descrição do erro como uma string para que você possa inspecioná-lo ou imprimi-lo da maneira que desejar.

Veja man 3 perror e man 3 strerror para detalhes.

    
por 28.02.2011 / 22:24
3

Em última análise, ele acaba em errno.h, após vários #include s Esse erro é ENOMEDIUM, encontrado em /usr/include/asm-generic/errno.h . Você desmontou antes de removê-lo?

    
por 28.02.2011 / 08:09
1

Você pode procurar um pequeno utilitário chamado errno . É essencialmente alguma hackeria de shell que usa sed para extrair informações dos arquivos de cabeçalho mencionados em outras respostas. A saída é semelhante à seguinte:

$ errno 123
ENOMEDIUM      123     /* No medium found */
$ errno 111
ECONNREFUSED    111     /* Connection refused */
$ errno 122
EDQUOT        122     /* Quota exceeded */
    
por 28.02.2011 / 23:04