C 런타임 라이브러리 errno이란?

errono

C 런타임 라이브러리의 errno은 일반적으로 프로그래밍 오류를 설명하는 데 사용되는 전역 변수입니다. 런타임 라이브러리 함수 실행에 문제가 있을 때 오류에 대한 정보를 제공하기 위해 사용됩니다. 이는 errno.h 헤더 파일에 정의되어 있습니다.

 

예시) fopen() 함수에서 오류 처리

함수 호출 전 errno 값으로 설정하고 라이브러리 함수를 호출한 뒤 함수 호출이 실패하면 errno 값을 출력하는 형태로 활용합니다.

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

int main() {
    errno = 0; // errno 초기화
    FILE *file = fopen("nonexistent_file.txt", "r");

    if (file == NULL) {
        perror("파일 열기 실패"); // 오류 메시지를 출력합니다.
        printf("errno: %d\n", errno); // errno 값 출력
        return 1;
    }

    // 파일 처리 작업
    fclose(file);
    return 0;
}

 

자주 발생하는 errno

1. EACCES (13) : 권한이 없음
파일이나 디렉터리에 액세스하려 할 때 권한이 없는 경우 발생합니다. 예를 들어, 읽기 전용 파일을 쓰기 모드로 열려고 시도하거나, 다른 사용자가 소유한 파일을 수정하려고 할 때 발생할 수 있습니다.

 

2. ENOENT (2) : 파일이나 디렉터리가 없음
주어진 경로에 해당하는 파일이나 디렉터리가 존재하지 않는 경우 발생합니다. 예를 들어, 존재하지 않는 파일을 열려고 시도하거나, 디렉터리를 변경하려고 할 때 발생할 수 있습니다.

 

3. ENOMEM (12) : 메모리 부족
시스템이 요청한 메모리를 할당할 수 없는 경우 발생합니다. 예를 들어, malloc() 함수 호출로 메모리를 할당하려고 시도하거나, 시스템 자원이 부족한 경우 발생할 수 있습니다.

 

4. EBADF (9) : 잘못된 파일 설명자
유효하지 않은 파일 설명자를 사용하여 파일 작업을 수행하려고 시도하는 경우 발생합니다. 예를 들어, 이미 닫힌 파일 설명자를 사용하려고 시도하거나, 파일 설명자가 유효하지 않은 경우 발생할 수 있습니다.

 

5. EIO (5) : 입출력 오류
하드웨어 레벨에서 발생하는 입출력 오류입니다. 예를 들어, 디스크 손상, 전원 문제 등의 하드웨어 문제로 인해 파일 작업이 실패한 경우 발생할 수 있습니다.

 

이외에도 다양한 에러 상수가 있습니다. 더 자세하고 정확한 내용은 아래의 링크에서 확인하실 수 있습니다.

 

https://learn.microsoft.com/ko-kr/cpp/c-runtime-library/errno-constants?view=msvc-170

 

errno 상수

자세한 정보: errno 상수

learn.microsoft.com

 

반응형

댓글

Designed by JB FACTORY