2016-06-24 6 views
1

각 행이 특정 형식 (예 : /etc/passwd 형식)을 준수해야하는 행 단위로 파일 (또는 stdin)을 읽는 Unix 명령 foo을 고려하십시오.Unix 프로그램의 종료 상태 규칙

모든 행이 정확하지 않은 경우 (모두는 아님) 종료 상태가 EXIT_SUCCESS 또는 EXIT_FAILURE일까요? I 표준 참조 시도

,

C11 Standard: 7.20.4.3

exit 함수
파라 5

마지막으로, 제어는 호스트 환경으로 반환된다. status 값이 0 또는 EXIT_SUCCESS 인 경우 상태 성공 종료에 대한 구현 정의 형식이 이 반환됩니다. 상태 값이 EXIT_FAILURE이면 구현 실패 정의 상태 의 형식이 반환됩니다. 그렇지 않으면 반환 된 상태는 구현으로 정의됩니다.

위의 내용을 해석하면 구현 정의는 구현자가 결정을 남겼음을 의미합니다. 이 해석이 맞습니까?

+2

C 표준 횡설수설에서 영어로 일부 번역 : 구현 = 컴파일러, 구현 정의 = 컴파일러 관련 동작 (시스템 고유 동작에 따라 달라질 수 있음). C 표준의 모든 내용은 최종 사용자/응용 프로그램 프로그래머가 아닌 컴파일러 작성자를 처리하는 방식으로 작성됩니다. – Lundin

+0

분명히 : Jimbo의 다양한 자료 (Wikipedia)의 Emporium : [Exit Status] (https://en.wikipedia.org/wiki/Exit_status)에서 참조 –

답변

1

C 표준에서 "구현 정의"라는 용어는 플랫폼 구현을 의미하고 이 아닌 개별 응용 프로그램의 프로그래머입니다.

이 문장이 의미하는 것은 다른 플랫폼이 성공 또는 실패가 환경 (예 : 셸)으로 전송되는 방식에 따라 다른 규칙이있을 수 있다는 것입니다. 구현은 실패로 이어지는 원인에 따라 다른 코드를 구별 할 수있는 수단을 제공 할 수도 있습니다. 그러나 그런 코드들은 다른 시스템들 사이에서 이식 가능하지 않을 수 있습니다.

프로그래머가 성공 또는 실패로 간주하는 의미에 대해서는 응용 프로그램에 적합한 모든 것을 자유롭게 수행 할 수 있습니다.

1

결정 사항이 구현 자에게 남겨 졌음을 분명히합니다. 프로그램 사용 방법에 따라 다릅니다. foo가 잘못 입력 포맷 발생하는 오류로 종료하는 경우 예를 들어

foo의 사용자는 stderr의 내용을 포함하는 이메일을 종료 상태 및 경고 그녀를 확인하는 쉘 스크립트를 작성할 수 있습니다. foo이 성공적으로 끝나면 이메일을 보낼 필요가 없습니다.