C에서 오류 처리

Naila Saad Siddiqui 2024년2월15일
  1. C에서 오류 처리
  2. 전역 변수 errno 사용
  3. perror()strerror() 함수 사용
  4. EXIT_STATUS 사용
  5. 결론
C에서 오류 처리

이 간단한 문서는 C 언어 프로그램에서 오류를 처리하는 데 사용할 수 있는 다양한 방법에 대한 논의에 관한 것입니다.

C에서 오류 처리

오류 처리(또는 예외 처리)가 C에서 직접 지원되지는 않지만 언어에서 오류를 처리하는 방법은 여전히 있습니다. 프로그래머는 함수 반환 값을 테스트하고 처음부터 오류가 발생하지 않도록 해야 합니다.

이러한 반환 값에 대한 빠른 테스트를 빠르게 수행할 수 있습니다. 예를 들어, 많은 C 함수 호출이 오류의 경우 -1 또는 NULL을 반환하기 때문에 if 문입니다.

C 언어에서 다양한 유형의 오류를 처리하기 위해 다양한 방법을 사용할 수 있습니다. 그들 중 일부는 이 기사에서 논의됩니다.

  1. 전역 변수 errno를 사용합니다.
  2. C 언어에서 perror()strerror() 함수 사용.
  3. 함수의 종료 상태를 사용합니다.

전역 변수 errno 사용

전역 변수 errno는 라이브러리 파일 errorno.h에서 정의됩니다. C 프로그래밍 언어에서 errno라는 변수에는 발생한 오류를 지정하는 데 사용할 수 있는 코드(값)가 자동으로 제공됩니다.

오류 유형은 errno에 대해 다른 코드(값)로 표시됩니다. 다음은 몇 가지 다른 errno 값과 그에 대한 설명 목록입니다.

에러 코드 설명
1 이 작업은 허용되지 않습니다.
2 파일 또는 디렉토리를 찾을 수 없습니다.
기능을 찾을 수 없습니다.
4 모든 시스템 호출이 중단되었습니다.
5 입력 또는 출력 오류.
6 해당 장치를 찾을 수 없습니다.
7 전달된 인수 목록이 지정된 것보다 깁니다.
8 실행 기능 오류.
9 잘못된 파일 번호 오류입니다.
10 칠레 프로세스를 찾을 수 없습니다.
11 다시 시도하십시오.
12 메모리 부족 오류입니다.
13 액세스 권한이 거부되었습니다.

존재하지 않는 파일을 열려고 시도하는 예제 코드 세그먼트를 고려해 봅시다. 그러면 errno 변수의 값이 표시됩니다.

코드 예:

#include <errno.h>
#include <stdio.h>
int main() {
  FILE* file;
  // we're trying to open a file that doesn't exist
  file = fopen("samepleFile.txt", "r");
  printf("The errorno Value is: %d\n ", errno);

  return 0;
}

위의 코드 예제에서 우리는 File에 대한 객체를 생성한 다음 읽기용으로 파일을 열 수 있도록 fopen() 함수를 호출했습니다. 그러나 디렉토리에서 찾을 수 없는 파일 이름을 지정했습니다.

따라서 오류가 발생하고 errno 값이 설정됩니다. 그런 다음 그 값을 인쇄합니다.

출력:

errno 데모 프로그램 출력

출력에서 반환된 오류 번호는 2입니다. 위의 표에서 2"해당 파일 또는 디렉터리를 찾을 수 없음"을 의미하는 것과 일치할 수 있습니다.

perror()strerror() 함수 사용

발생한 오류 유형은 위에서 얻은 errno 값으로 표시됩니다.

오류 설명이 필요한 경우 두 가지 기능을 사용하여 오류 번호와 연결된 텍스트 메시지를 표시할 수 있습니다. 이들은 perror()strerror()입니다.

  • perror() 함수는 해당 errno에 대해 설정된 실제 메시지 뒤에 오류에 대한 사용자 정의 텍스트 메시지를 표시합니다.

    통사론:

    void perror(const char *str)
    

    str은 실제 오류 메시지 전에 표시해야 하는 사용자 지정 메시지의 문자열입니다.

  • strerror는 전달된 errno에 대해 설정된 텍스트 메시지를 반환합니다.

    통사론:

    char *strerror(int errnum)
    

    errnum은 전달된 오류 번호입니다.

존재하지 않는 파일을 여는 이전 예제를 수정하고 perror()strerror()를 통해 오류 메시지를 표시합니다.

코드 예:

#include <errno.h>
#include <stdio.h>

int main() {
  FILE* file;
  // we're trying to open a file that doesn't exist
  file = fopen("samepleFile.txt", "r");

  if (file == NULL) {
    printf("Value of error number: %d\n", errno);
    perror("Error message by perror");
    printf("Error Message from strerror : %s\n", strerror(errno));
    `
  } else {
    fclose(file);
  }
  return 0;
}

위의 코드 세그먼트에서 errno 값을 인쇄한 다음 perror,를 사용하여 오류 메시지를 인쇄한 다음 strerror를 통해 인쇄했습니다.

출력:

perror 및 strerror 출력

EXIT_STATUS 사용

성공 또는 실패 종료를 표시하기 위해 C 표준은 EXIT SUCCESSEXIT FAILURE라는 두 개의 상수 매크로를 지정하며, 이는 exit()에 전달될 수 있습니다. 이러한 매크로는 stdlib.h에 나열된 매크로입니다.

이전 예제를 추가로 수정하고 파일을 찾을 수 없고 사례 파일에서 성공적인 종료가 발견되면 실패 종료 호출을 수행합니다.

코드 예:

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
  FILE* file;
  // we're trying to open a file that doesn't exist
  file = fopen("samepleFile.txt", "r");

  if (file == NULL) {
    int errorNumber = errno;
    printf("Value of error number: %d\n", errno);
    perror("Error message by perror");
    printf("Error Message from strerror : %s\n", strerror(errno));
    exit(EXIT_FAILURE);
  } else {
    fclose(file);
    exit(EXIT_SUCCESS);
  }
  printf("Program exiting");
  return 0;
}

위의 코드 예제에서는 조건문의 두 경우 모두에 종료 함수를 포함했습니다. 프로그램이 종료되기 직전에 printf 기능을 추가했습니다.

프로그램이 이전에 종료되었으므로 이 메시지는 인쇄되지 않습니다.

출력:

종료값 출력

결론

C는 예외 처리를 명시적으로 지원하지 않습니다. 그러나 특정 오류 처리 프리미티브(즉, 라이브러리 함수)를 사용하여 C에서 충분한 예외 처리를 달성할 수 있습니다.

관련 문장 - C Error