저는 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로 끝나고 여러 #include
s 후에 오류는 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 */