Linux의 오류 코드 이해

Linux의 오류 코드 이해

저는 Linux(커널 버전 2.6.32.28) 노트북을 사용하고 있습니다.
파일 io 삽입/실행/SD 콤보 카드 제거 후 다음 오류가 발생합니다.

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

이제 이러한 오류가 무엇을 의미하는지 이해하고 싶습니다.

내가 볼 수 있듯이 표준 오류 코드 중 아주 적은 부분이 arch/powerpc/boot/stdio.h에 있는 반면, 다른 코드는 다양한 위치에 분산되어 있습니다.

Linux에는 (소스 코드에서) 오류 코드를 추적하고 이해하는 체계적인 방법이 있습니까?

답변1

셸에서 다음을 실행할 수 있습니다 perror.

$ perror 123
OS error code 123:  No medium found

이것은 MySQL과 함께 제공됩니다.

MySQL이 없으면 Perl이나 Python을 사용할 수 있습니다. 예를 들면 다음과 같습니다.

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

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

C 프로그램에서는 동일한 이름의 함수를 사용할 수 있습니다.

void perror(const char *s);

메시지가 인쇄 s되고 오류 이유가 추가됩니다.

또는 다음을 사용할 수 있습니다.

char *strerror(int errnum);

필요한 경우 검사하거나 인쇄할 수 있도록 오류에 대한 설명을 문자열로 반환합니다.

자세한 내용은 및 를 참조하세요 man 3 perror.man 3 strerror

답변2

다음에 정의된 표준 오류 값이 있습니다.errno.h. 시스템에서 이 파일을 보고 값을 확인할 수 있습니다. 대부분의 시스템에서는 /usr/include/errno.h포함된 파일이나 파일에 있습니다 . Linux에서는 대부분이 /usr/include/asm-generic/errno-base.h또는 에 있고 /usr/include/asm-generic/errno.h일부는 /usr/include/bits/errno.h.

값이 있으면 표준 라이브러리 함수를 호출합니다.strerror또는perror해당 오류 메시지를 받으십시오(현재 로케일에서). 명령줄에서 오류 문자열을 보는 빠른 방법은 다음과 같습니다.

perl -MPOSIX -le 'print strerror 123'
python -c 'import os; print os.strerror(123)'
zmodload zsh/system; syserror 123  # in zsh

답변3

이는 errno.h로 끝나고 여러 #includes 후에 오류는 ENOMEDIUM이며 /usr/include/asm-generic/errno.h. 삭제하기 전에 제거하셨나요?

답변4

다음과 같은 작은 유틸리티를 살펴볼 수 있습니다.오류 번호. sed다른 답변에서 언급된 헤더 파일에서 정보를 추출하는 것은 본질적으로 일부 쉘 해킹입니다 . 출력은 다음과 같습니다.

$ errno 123
ENOMEDIUM      123     /* No medium found */
$ errno 111
ECONNREFUSED    111     /* Connection refused */
$ errno 122
EDQUOT        122     /* Quota exceeded */

관련 정보