
📌 매뉴얼 (Linux)
NAME
exit() - End Program
: 프로그램 종료하기
SYNOPSIS
#include <stdlib.h>
void exit(int status);
DESCRIPTION
The exit() function returns control to the host environment from the program. It first calls all functions that are
registered with the atexit() function, in reverse order; that is, the last one that is registered is the first one
called. It deletes all buffers and closes all open files before ending the program.
The argument status can have a value from 0 to 255 inclusive, or be one of
the macros EXIT_SUCCESS or EXIT_FAILURE. A status value of EXIT_SUCCESS
or 0 indicates a normal exit;
otherwise, another status value is returned.
: exit() 함수는 프로그램에서 호스트 환경으로 제어권을 반환합니다. 먼저 atexit() 함수에 등록된 모든 함수를
역순으로 호출합니다. 즉, 마지막으로 등록된 함수를 첫 번째 함수로 호출합니다. 프로그램을 종료하기 전에
모든 버퍼를 삭제하고 열린 파일을 모두 닫습니다.
인수 상태는 0에서 255 사이의 값을 포함하거나 매크로 EXIT_SUCCESS 또는 EXIT_FAILUE 중
하나일 수 있습니다. EXIT_SUCCESS 또는 0의 상태 값은 정상적인 종료를 나타냅니다;
그렇지 않으면 다른 상태 값이 반환됩니다.
RETURN VALUE
The exit() function returns both control and the value of status to the operating system.
: exit() 함수는 컨트롤과 상태 값을 모두 운영 체제에 반환합니다.
📌 함수 설명
exit 함수는 atexit()함수로 등록된 종료 핸들러를 처리하고 표준 입출력 스트림을 닫은 후, 커널의 종료 작업을 실행한다.
단순하게 말하자면, 설정해둔 과정을 거치며 종료를 시켜주는 함수이다.
특징적인 부분으로는, 모든 열려진 파일을 자동으로 닫으며, 출력 버퍼 속 데이터가 있으면 쓰기 완료 시킨다.
입력 인자인 status는 운영체제로 전달되며 return의 전달값과 같은 역할이 된다.
그렇다면, exit 함수의 인자인 status는 어떤걸까?
stdlib.h에 해당 status 상수가 정의되어 있다.
정의된 상수명 | 값 |
EXIT_SUCCESS | 0 |
EXIT_FAILURE | 1 |
위와 같이, status에 값이 0이 들어가면, 정상적으로 종료된 상황으로 간주하고,
0이 아닌 숫자(대체적으로 1을 반환하고, 이외의 숫자도 대입 가능) 가 들어가게 되면 어떤 오류에 의해 종료된 상황으로 본다.
main문에서의 return(0); 와 exit(0)은 동일하지만,
exit은 운영체제에게 권한을 주며 바로 프로세스를 종료하고, return은 뒤 문장을 실행하며 프로그램 전체를 중지시킨다.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
printf("양의 정수를 입력해주세요.");
scanf("%d", &i);
if(i <= 0)
exit(1);
exit(0);
}
입력 및 결과 - fish shell)

일반 shell에서 확인하면 똑같이 종료된 것만 알 수 있고,
fish shell 에서 확인하면 exit(1)이 실행된 것을 [1]로 확인할 수 있다.
만약 exit(1)자리에 exit(5)가 들어가면, [1]이 [5]로 바뀌고,
지정한 status를 운영체제로 전달한 모습을 볼 수 있다.
해당 exit(1)자리가 return(1)으로 바뀌어도 동일하다.
'프로그래밍 > C' 카테고리의 다른 글
[function] pipe 함수 알아보기 (0) | 2024.06.06 |
---|---|
[function] fork 함수 알아보기 (2) | 2024.06.04 |
[function] execve 함수 알아보기 (0) | 2024.05.30 |
[function] dup2 함수 알아보기 (2) | 2024.05.28 |
[function] dup 함수 알아보기 (0) | 2024.05.27 |