-1을 반환 할 때 오류 255가 발생하는 이유
On 2월 17, 2021 by admin 저는 C ++ 프로그래밍을 처음 사용하고 매우 기본적인 질문이 있습니다. C ++ 프로그램에서 -1
를 반환하고 종료 상태를 확인하면 255
가 표시됩니다. 그 이유는 무엇입니까?
코드가 가장 기본적인 것입니다.
int main() { return -1; }
그런 다음 컴파일 된 코드를 실행 한 후
echo $? 255
Answer
UNIX / POSIX에서 프로그램의 종료 코드는 다음과 같이 정의됩니다. 부호없는 8 비트 값. -1을 부호없는 8 비트로 변환하면 255가됩니다.
추가 할 편집 :
자세한 내용을 제공하려면 UNIX에서 wait * () 계열의 시스템 호출이 결과를 인코딩합니다. 단일 32 비트 정수로 처리합니다. 해당 결과의 32 비트는 프로세스가 코어를 덤프했는지 여부, 신호로 인해 종료되었는지 여부 등과 같은 정보를 제공하기 위해 추가로 분할됩니다. 32 비트 중 8 비트 만 프로세스의 종료 코드로 예약되어 있습니다. 그리고 그것들은 부호없는 값으로 해석됩니다.
UNIX / POSIX의 fork / exec / wait 모델은 가장 오래되고 가장 깊이 내장 된 기능 중 하나입니다. 오늘 새 운영 체제를 설계한다면 다른 작업을 수행 할 수 있습니다 (최소한 64 비트 사용 :-)).
다른 한편으로는 실질적으로 255 개 이상의 종료 코드를 갖는 것이 정말 유용합니까? 나는 그것을 의심한다. 정말로 더 강력한 것을 원한다면 더 넓은 범위의 숫자 종료 코드 대신 “종료 문자열”로 전환하는 것이 좋습니다.
댓글
- 잘 수정했습니다. 추가 정보를 제공해 주셔서 감사합니다.
답변
bash
EXIT STATUS
의 div> 매뉴얼 페이지 실행 된 명령의 종료 상태는 waitpid 시스템 호출 또는 이에 상응하는 함수에서 반환 된 값입니다. 종료 상태는 0에서 255 사이에 속하지만 아래에 설명 된 것처럼 셸은 특별히 125 이상의 값을 사용할 수 있습니다. 쉘 내장 및 복합 명령의 종료 상태도이 범위로 제한됩니다. 특정 상황에서 셸은 특정 실패 모드를 나타 내기 위해 특수 값을 사용합니다.
따라서 해당 범위로 제한하므로 실제로는 놀랍습니다.
waitpid (2)
매뉴얼 페이지 :
WEXITSTATUS(status)
는 하위 항목의 종료 상태를 반환합니다. 이는 하위 항목이 exit (3) 또는 _exit (를 호출 할 때 지정한 상태 인수의 최하위 8 비트로 구성됩니다. 2) 또는 main ()의 return 문에 대한 인수로.이 매크로는 WIFEXITED가 true를 반환 한 경우에만 사용해야합니다.
답글 남기기