STDIN, STDOUT, STDERR 및 반환 값 정보

리 윌리엄

내가 사용하여 데이터 스트림을 리디렉션 할 수 있습니다 < >2>위해 STDIN, STDOUT그리고 STDERR.

어쨌든 나는 그것들을 반환 값과 혼동합니다.

반환 값이 1아니면 2이해하는 방법?

반환 값이 -1이해하는 방법 이라면 ?

break루프를 종료 할 수 있지만 다음 코드를 계속 실행할 수 있습니다 return. 를 참조하면 return, 그것은 종료됩니다 main()리턴 코드와 올바른을?

Michał Górny

이에 답하기 위해 C99 표준을 참조하십시오. 7.20.4.3 The exit function읽으면 다음 문을 찾을 수 있습니다.

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

여기서 강조해야 할 것은 C 표준이 종료 상태에 대한 특정 코드를 지정하지 않는다는 것입니다. 위의 스 니펫에서 언급 된 0 개 를 볼 수 있지만 순전히 exit()API의 일부입니다 . 문장의 나머지 부분을 바꾸면 그 0 은 다른 구현 정의 성공적인 종료에 매핑 될 수 있습니다. 마찬가지로 EXIT_SUCCESS의 정의가 EXIT_FAILURE다른 코드에 매핑되지 않을 것이라는 보장 은 없습니다. 특히 정수로 끝나지 않을 수도 있습니다.

또한 7.20.4.6 The system function 을 보면 다음을 알 수 있습니다.

반환 값 3 인수가 널 포인터 인 경우 시스템 함수는 명령 프로세서를 사용할 수있는 경우에만 0이 아닌 값을 반환합니다. 인수가 널 포인터가 아니고 시스템 함수가 리턴하면 구현 정의 값을 리턴합니다.

이는 종료 코드가 순전히 구현에 정의되어 있으며 특정 동작에 의존 할 수 없음을 확인합니다.


이제 POSIX는 이것을 약간 확장합니다. stdlib.h헤더 를 읽으면 다음을 찾을 수 있습니다.

EXIT_FAILURE

exit (); 종료에 실패했습니다. 0이 아닌 값으로 평가됩니다.

EXIT_SUCCESS

exit (); 종료 성공 0으로 평가됩니다.

이것은 이미 0성공적인 종료 에 사용할 구현을 제한합니다 . 그러나 실제로 실패에 사용되는 0이 아닌 값을 정의하지는 않습니다.

exit()함수 에 대해 읽으면 다음을 찾을 수 있습니다.

status 값은 0, EXIT_SUCCESS, EXIT_FAILURE 또는 다른 값이 될 수 있지만 대기중인 상위 프로세스에서 최하위 8 비트 (즉, 상태 & 0377) 만 사용할 수 있습니다.

또한 0 ~ 255 범위의 종료 상태를 다른 프로세스에서 사용할 수 있도록 보장함으로써 C 정의를 확장합니다.

따라서 POSIX는 0을 성공적인 종료로 정의하고 EXIT_FAILURE(일부 0이 아닌 값) 실패한 종료로 정의하고 나머지 값은 프로그램 사용을 위해 남겨 둡니다.

그러나 다른 프로세스에서 종료 코드를 구문 분석하는 경우 wait()기능도 살펴 봐야 합니다. 신호에 의한 종료와 같은 비정상 종료 상태에 대한 반환 상태를 처리하는 데 사용되는 추가 매크로를 정의합니다.


더 나아가면 FreeBSD가 sysexits.h 헤더를 도입 하여 종료 코드를 훨씬 더 정의 한다는 것을 알 수 있습니다 .

성공적인 종료는 항상 상태 0 또는 EX_OK로 표시됩니다. 임의의 프로그램이 이미 반환 할 수있는 다른 종료 상태와 충돌 할 가능성을 줄이기 위해 오류 번호는 EX__BASE에서 시작됩니다. 코드의 의미는 대략 다음과 같습니다.

EX_USAGE (64) 명령이 잘못 사용되었습니다 (예 : 잘못된 인수 수, 잘못된 플래그, 매개 변수의 잘못된 구문 등). […]

즉, FreeBSD 용으로 작성된 응용 프로그램은 잘 정의 된 종료 코드 64+를 사용할 수 있습니다.


간단히 요약하면 :

  1. C 표준은 성공실패한 종료 를 반환하기위한 API 만 정의합니다 . 그 결과를 사용, 전달 또는 얻는 방법을 정의하지 않습니다.
  2. POSIX 는 성공을 위해 0 을 사용하도록 제한하고 정상적인 프로세스 종료의 경우 8 개의 최하위 코드 비트를 다른 프로세스에서 사용할 수 있도록 보장합니다 (예 :) wait().
  3. FreeBSD는 잘 정의 된 오류 조건 종료 코드를 만들기 위해 종료 코드 64+를 예약합니다.

그것이 표준이 얼마나 멀리 가는지입니다. 이제 실제로 대부분의 프로그램 은 일반적인 성공을 나타 내기 위해 0사용 하고 다양한 다른 상태를 나타 내기 위해 0이 아닌 코드를 사용합니다. 특정 정보를 전달하기 위해 종료 코드를 사용하는 프로그램은 종종 맨 페이지에서이를 설명합니다.

예를 들어 GNU를 보면 다음과 cmp같습니다.

종료 상태 0은 차이가 없음을 의미하고 1은 일부 차이가 있음을 의미하며 2는 문제가 있음을 의미합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

stdin 입력 문자열을 받아 stderr, stdout 및 반환 코드를 반환하는 Python 하위 프로세스와 유사한 호출이 있습니까?

분류에서Dev

플래그 -a에 대한 유효하지 않은 값 "zookeeper": 유효한 스트림은 STDIN, STDOUT 및 STDERR입니다.

분류에서Dev

stdout 및 stderr에 대한 subprocess.call 로거 정보 및 오류

분류에서Dev

GNU 병렬 정렬 stdout 및 stderr

분류에서Dev

stdin 및 stdout 로깅

분류에서Dev

stdin을 stdout 및 stderr에 복제하지만 동기화 된 방식으로

분류에서Dev

파일, syslog 및 터미널에 stdout 및 stderr 보내기

분류에서Dev

echo 또는 print / dev / stdin / dev / stdout / dev / stderr

분류에서Dev

특정 줄의 stdout 및 stderr 리디렉션

분류에서Dev

node.js 8의 child.process에서 stdout 및 stderr 정의

분류에서Dev

bash에서 stdin과 stdout 및 stderr을 동시에 리디렉션하는 방법은 무엇입니까?

분류에서Dev

stdout 및 stderr을 파일로, stderr을 stdout으로 리디렉션

분류에서Dev

stdin, stderr, 리디렉션 및 로그

분류에서Dev

프로세스 ID가 제공된 프로세스의 stderr 및 stdout보기

분류에서Dev

함수 및 트랩 종료 신호에 stderr / stdout 메시지 보내기

분류에서Dev

stdout 및 stderr를 파일로 리디렉션하는 POSIX 호환 방법

분류에서Dev

xslt : 값 정렬, 비교 및 반환

분류에서Dev

함수 반환 값 (문자 및 정수)

분류에서Dev

lftp, stdout, stderr 및 SAP exec_protocol

분류에서Dev

PowerShell 결합 및 로그 Stderr / Stdout

분류에서Dev

파일에 stderr 및 stdout 추가

분류에서Dev

Bash 스크립트 stderr 및 stdout

분류에서Dev

Unix cat 명령, 파이프 및 stdin / stdout

분류에서Dev

프로세스의 stdin 및 stdout 덤프

분류에서Dev

stdout 및 stdin 통신 간소화 가능

분류에서Dev

tar : 텍스트 stdin 및 stdout 압축

분류에서Dev

stdin stdout 및 stderr 이외의 파일 설명자를 얻는 방법 ($ program 1> file_1 3> file_2과 같은 작업을 수행)?

분류에서Dev

systemd 서비스의 stdout / stderr보기

분류에서Dev

管道STDERR与STDOUT

Related 관련 기사

  1. 1

    stdin 입력 문자열을 받아 stderr, stdout 및 반환 코드를 반환하는 Python 하위 프로세스와 유사한 호출이 있습니까?

  2. 2

    플래그 -a에 대한 유효하지 않은 값 "zookeeper": 유효한 스트림은 STDIN, STDOUT 및 STDERR입니다.

  3. 3

    stdout 및 stderr에 대한 subprocess.call 로거 정보 및 오류

  4. 4

    GNU 병렬 정렬 stdout 및 stderr

  5. 5

    stdin 및 stdout 로깅

  6. 6

    stdin을 stdout 및 stderr에 복제하지만 동기화 된 방식으로

  7. 7

    파일, syslog 및 터미널에 stdout 및 stderr 보내기

  8. 8

    echo 또는 print / dev / stdin / dev / stdout / dev / stderr

  9. 9

    특정 줄의 stdout 및 stderr 리디렉션

  10. 10

    node.js 8의 child.process에서 stdout 및 stderr 정의

  11. 11

    bash에서 stdin과 stdout 및 stderr을 동시에 리디렉션하는 방법은 무엇입니까?

  12. 12

    stdout 및 stderr을 파일로, stderr을 stdout으로 리디렉션

  13. 13

    stdin, stderr, 리디렉션 및 로그

  14. 14

    프로세스 ID가 제공된 프로세스의 stderr 및 stdout보기

  15. 15

    함수 및 트랩 종료 신호에 stderr / stdout 메시지 보내기

  16. 16

    stdout 및 stderr를 파일로 리디렉션하는 POSIX 호환 방법

  17. 17

    xslt : 값 정렬, 비교 및 반환

  18. 18

    함수 반환 값 (문자 및 정수)

  19. 19

    lftp, stdout, stderr 및 SAP exec_protocol

  20. 20

    PowerShell 결합 및 로그 Stderr / Stdout

  21. 21

    파일에 stderr 및 stdout 추가

  22. 22

    Bash 스크립트 stderr 및 stdout

  23. 23

    Unix cat 명령, 파이프 및 stdin / stdout

  24. 24

    프로세스의 stdin 및 stdout 덤프

  25. 25

    stdout 및 stdin 통신 간소화 가능

  26. 26

    tar : 텍스트 stdin 및 stdout 압축

  27. 27

    stdin stdout 및 stderr 이외의 파일 설명자를 얻는 방법 ($ program 1> file_1 3> file_2과 같은 작업을 수행)?

  28. 28

    systemd 서비스의 stdout / stderr보기

  29. 29

    管道STDERR与STDOUT

뜨겁다태그

보관