c 언어/c 표준 라이브러리(Standard C Library)

C 표준 API: 시스템 호출 및 종료 (system, exit, abort)

임베디드 친구 2025. 2. 25. 08:58
728x90
반응형

C 표준 API: 시스템 호출 및 종료 (system, exit, abort)

C 언어에서 시스템 호출 및 프로그램 종료를 제어하는 중요한 함수로 system, exit, abort가 있습니다. 이 함수들은 운영체제와의 상호작용을 수행하며, 프로그램의 흐름을 제어하는 데 유용하게 사용됩니다. 이번 포스팅에서는 각 함수의 역할과 사용법을 예제와 함께 살펴보겠습니다.


1. system 함수

개요

system 함수는 운영체제의 쉘 명령어를 실행할 수 있도록 도와주는 함수입니다. 이 함수는 <stdlib.h> 헤더 파일에 정의되어 있습니다.

#include <stdlib.h>
int system(const char *command);
  • command : 실행할 명령어 문자열 (NULL을 전달하면 명령어 실행이 가능한지 확인 가능)
  • 반환값 : 명령어 실행 결과의 종료 상태 코드 (일반적으로 0이면 성공, 비 0이면 실패)

사용 예제

#include <stdio.h>
#include <stdlib.h>

int main() {
    printf("디렉터리 목록 출력:\n");
    system("ls -l"); // Linux/MacOS
    // system("dir"); // Windows
    return 0;
}

실행 결과 (Linux/MacOS 기준)

total 12
drwxr-xr-x  2 user user 4096 Jan 31 12:00 Documents
-rw-r--r--  1 user user  123 Jan 31 12:00 test.c

주의사항

  • system 함수는 외부 명령어를 실행하므로 보안상 위험할 수 있음
  • 임베디드 시스템이나 보안이 중요한 환경에서는 사용을 자제하는 것이 좋음

2. exit 함수

개요

exit 함수는 현재 실행 중인 프로그램을 정상적으로 종료하는 함수입니다. return 문을 사용하여 메인 함수에서 종료할 수도 있지만, exit 함수를 사용하면 프로그램의 어느 지점에서든 종료할 수 있습니다.

#include <stdlib.h>
void exit(int status);
  • status : 종료 상태 코드 (0이면 정상 종료, 0이 아니면 비정상 종료)
  • atexit을 이용하면 종료 전에 실행할 함수 등록 가능

사용 예제

#include <stdio.h>
#include <stdlib.h>

void cleanup() {
    printf("프로그램이 종료됩니다.\n");
}

int main() {
    atexit(cleanup); // 종료 시 실행할 함수 등록
    printf("프로그램 실행 중...\n");
    exit(0); // 정상 종료
    printf("이 문장은 실행되지 않음\n");
    return 0;
}

실행 결과

프로그램 실행 중...
프로그램이 종료됩니다.

주의사항

  • exit를 호출하면 atexit으로 등록된 함수들이 실행됨
  • 열린 파일이 있다면 자동으로 닫힘 (fclose 호출 필요 없음)

3. abort 함수

개요

abort 함수는 프로그램을 즉시 비정상 종료하는 함수입니다. exit 함수와 달리 atexit에 등록된 함수가 실행되지 않으며, 열린 파일도 닫히지 않습니다.

#include <stdlib.h>
void abort(void);
  • 강제 종료 시 사용
  • 종료 상태 코드는 일반적으로 SIGABRT 신호를 발생시킴
  • 디버깅 시 강제로 프로그램을 중단하는 데 유용함

사용 예제

#include <stdio.h>
#include <stdlib.h>

int main() {
    printf("에러 발생! 프로그램을 강제 종료합니다.\n");
    abort(); // 비정상 종료
    printf("이 문장은 실행되지 않음\n");
    return 0;
}

실행 결과

에러 발생! 프로그램을 강제 종료합니다.
Aborted (core dumped)

주의사항

  • abort는 열린 파일을 닫지 않으므로, 데이터 손실 가능성이 있음
  • 정상적인 종료가 가능하다면 exit를 사용하는 것이 바람직함

4. system, exit, abort 비교

함수 설명 종료 상태 atexit 실행 여부 열린 파일 닫힘
system 쉘 명령 실행 쉘 명령의 종료 코드 반환 해당 없음 해당 없음
exit 정상 종료 인자로 전달된 종료 코드 반환 O O
abort 비정상 종료 SIGABRT 신호 발생 X X

5. 마무리

이번 포스팅에서는 C 언어의 system, exit, abort 함수에 대해 살펴보았습니다. 각 함수의 사용 목적과 특징을 명확히 이해하면, 프로그램을 보다 안정적으로 관리할 수 있습니다.

  • 시스템 명령어 실행이 필요하면 system을 사용하되, 보안에 유의해야 합니다.
  • 정상적인 종료에는 exit를 사용하고, 필요한 종료 작업을 atexit으로 등록할 수 있습니다.
  • 심각한 오류가 발생하면 abort를 사용하여 강제 종료할 수 있습니다.

이제 코드에서 적절한 종료 방식을 선택하여 활용해 보세요!

반응형