Errno.h

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

`errno.h`는 POSIX 표준 오류 값과 추가적인 매크로를 정의하는 헤더 파일이다. GNU C 라이브러리(glibc)는 `errno.h`를 통해 POSIX 표준 외에도 다양한 오류 코드를 제공하며, `strerror` 함수를 사용하여 각 오류에 대한 설명을 확인할 수 있다.

Errno.h
설명
헤더 파일C 프로그램
용도시스템 오류 번호를 정의하고 관련 함수를 제공함
주요 내용
정의된 매크로EDOM: 입력 인수가 함수의 정의된 영역 외부에 있음
ERANGE: 반환 값이 표현할 수 없을 정도로 큼
EILSEQ: 잘못된 멀티바이트 문자 시퀀스
EACCES: 권한 거부
관련 함수
함수 목록strerror: 오류 번호에 따른 오류 메시지 문자열 반환
strerror_r: strerror의 스레드 안전 버전
📚 더 읽어볼만한 페이지
  • C 표준 라이브러리 헤더 - Stdio.h
    `stdio.h`는 C 프로그래밍 언어의 표준 입출력 라이브러리 헤더 파일로, 파일 조작 및 콘솔 입출력 함수, `EOF`, `NULL` 등의 상수, `stdin`, `stdout`, `stderr` 같은 표준 스트림 변수, 그리고 `FILE` 형식을 제공하며, `gets()` 함수와 같은 보안 취약점에 대한 주의가 필요하다.
  • C 표준 라이브러리 헤더 - Stdlib.h
    `stdlib.h`는 C 표준 라이브러리의 헤더 파일로서 문자열 변환, 의사 난수 생성, 동적 메모리 관리, 프로세스 제어, 검색/정렬, 정수 산술 연산과 관련된 함수들을 정의하며 C 프로그래밍의 기본적인 기능 구현에 필수적이다.

2. POSIX 오류

POSIX 표준은 유닉스 계열 운영 체제에서 시스템 호출 오류를 나타내는 `errno` 변수와 관련된 오류 코드들을 정의한다. 이 오류 코드들은 `errno.h` 헤더 파일에 매크로 형태로 정의되어 있으며, `strerror` 함수를 통해 각 오류 코드에 해당하는 문자열 설명을 얻을 수 있다.

GNU C 라이브러리(GLIBC)는 POSIX 표준 외 추가적인 오류 값 매크로를 제공한다. 다음 표는 `strerror`가 제공하는 매크로에 대한 설명이다.

👆
좌우로 밀어서 보기
심볼설명
EPERM1연산이 허용되지 않음
ENOENT2파일 또는 디렉토리가 없음
ESRCH3프로세스가 없음
EINTR4인터럽트된 시스템 호출
EIO5입/출력 오류
ENXIO6장치 또는 주소가 없음
E2BIG7인자 목록이 너무 김
ENOEXEC8실행 형식 오류
EBADF9잘못된 파일 디스크립터
ECHILD10자식 프로세스가 없음
EAGAIN11리소스가 일시적으로 사용 불가능함
ENOMEM12메모리 할당 불가
EACCES13권한 거부
EFAULT14잘못된 주소
ENOTBLK15블록 장치가 필요함
EBUSY16장치 또는 리소스가 사용 중임
EEXIST17파일이 존재함
EXDEV18잘못된 장치 간 링크
ENODEV19장치가 없음
ENOTDIR20디렉토리가 아님
EISDIR21디렉토리임
EINVAL22잘못된 인자
ENFILE23시스템에 열린 파일이 너무 많음
EMFILE24열린 파일이 너무 많음
ENOTTY25장치에 부적절한 ioctl
ETXTBSY26텍스트 파일이 사용 중임
EFBIG27파일이 너무 큼
ENOSPC28장치에 공간이 없음
ESPIPE29불법 탐색
EROFS30읽기 전용 파일 시스템
EMLINK31링크가 너무 많음
EPIPE32파이프 손상
EDOM33수치 인자가 범위 밖임
ERANGE34수치 결과가 범위 밖임
EDEADLK35리소스 교착 상태 회피
ENAMETOOLONG36파일 이름이 너무 김
ENOLCK37사용 가능한 잠금이 없음
ENOSYS38함수가 구현되지 않음
ENOTEMPTY39디렉토리가 비어 있지 않음
ELOOP40심볼릭 링크 레벨이 너무 많음
ENOMSG42원하는 유형의 메시지가 없음
EIDRM43식별자가 제거됨
ECHRNG44채널 번호가 범위 밖임
EL2NSYNC45레벨 2가 동기화되지 않음
EL3HLT46레벨 3이 중지됨
EL3RST47레벨 3이 재설정됨
ELNRNG48링크 번호가 범위 밖임
EUNATCH49프로토콜 드라이버가 연결되지 않음
ENOCSI50CSI 구조를 사용할 수 없음
EL2HLT51레벨 2가 중지됨
EBADE52잘못된 교환
EBADR53잘못된 요청 디스크립터
EXFULL54교환이 가득 참
ENOANO55노드가 없음
EBADRQC56잘못된 요청 코드
EBADSLT57잘못된 슬롯
EBFONT59잘못된 글꼴 파일 형식
ENOSTR60장치가 스트림이 아님
ENODATA61사용 가능한 데이터가 없음
ETIME62타이머 만료
ENOSR63스트림 리소스 부족
ENONET64시스템이 네트워크에 연결되지 않음
ENOPKG65패키지가 설치되지 않음
EREMOTE66객체가 원격임
ENOLINK67링크가 끊어짐
EADV68광고 오류
ESRMNT69srmount 오류
ECOMM70전송 중 통신 오류
EPROTO71프로토콜 오류
EMULTIHOP72다중 홉 시도
EDOTDOT73RFS 관련 오류
EBADMSG74잘못된 메시지
EOVERFLOW75정의된 데이터 형식에 대한 값이 너무 큼
ENOTUNIQ76네트워크에서 이름이 고유하지 않음
EBADFD77파일 디스크립터 상태가 잘못됨
EREMCHG78원격 주소가 변경됨
ELIBACC79필요한 공유 라이브러리에 접근할 수 없음
ELIBBAD80손상된 공유 라이브러리에 접근함
ELIBSCN81a.out의 .lib 섹션이 손상됨
ELIBMAX82너무 많은 공유 라이브러리를 링크하려고 시도함
ELIBEXEC83공유 라이브러리를 직접 실행할 수 없음
EILSEQ84잘못되었거나 불완전한 멀티바이트 또는 와이드 문자
ERESTART85인터럽트된 시스템 호출을 다시 시작해야 함
ESTRPIPE86스트림 파이프 오류
EUSERS87사용자가 너무 많음
ENOTSOCK88소켓이 아닌 곳에서 소켓 연산
EDESTADDRREQ89대상 주소가 필요함
EMSGSIZE90메시지가 너무 큼
EPROTOTYPE91소켓에 대한 프로토콜 유형이 잘못됨
ENOPROTOOPT92프로토콜을 사용할 수 없음
EPROTONOSUPPORT93프로토콜이 지원되지 않음
ESOCKTNOSUPPORT94소켓 유형이 지원되지 않음
EOPNOTSUPP95연산이 지원되지 않음
EPFNOSUPPORT96프로토콜 패밀리가 지원되지 않음
EAFNOSUPPORT97프로토콜에서 지원하지 않는 주소 패밀리
EADDRINUSE98주소가 이미 사용 중임
EADDRNOTAVAIL99요청된 주소를 할당할 수 없음
ENETDOWN100네트워크가 다운됨
ENETUNREACH101네트워크에 연결할 수 없음
ENETRESET102네트워크가 재설정 시 연결을 끊음
ECONNABORTED103소프트웨어로 인해 연결이 중단됨
ECONNRESET104피어에 의해 연결이 재설정됨
ENOBUFS105사용 가능한 버퍼 공간이 없음
EISCONN106전송 엔드포인트가 이미 연결됨
ENOTCONN107전송 엔드포인트가 연결되지 않음
ESHUTDOWN108전송 엔드포인트가 종료된 후 보낼 수 없음
ETOOMANYREFS109참조가 너무 많음: 스플라이스 불가
ETIMEDOUT110연결 시간 초과
ECONNREFUSED111연결 거부
EHOSTDOWN112호스트가 다운됨
EHOSTUNREACH113호스트에 대한 경로 없음
EALREADY114연산이 이미 진행 중임
EINPROGRESS115연산이 현재 진행 중임
ESTALE116오래된 파일 핸들
EUCLEAN117구조를 정리해야 함
ENOTNAM118XENIX 명명된 유형 파일이 아님
ENAVAIL119사용 가능한 XENIX 세마포어가 없음
EISNAM120명명된 유형의 파일임
EREMOTEIO121원격 I/O 오류
EDQUOT122디스크 할당량 초과
ENOMEDIUM123매체를 찾을 수 없음
EMEDIUMTYPE124잘못된 매체 유형
ECANCELED125연산이 취소됨
ENOKEY126필요한 키를 사용할 수 없음
EKEYEXPIRED127키가 만료됨
EKEYREVOKED128키가 해지됨
EKEYREJECTED129키가 서비스에서 거부됨
EOWNERDEAD130소유자가 죽음
ENOTRECOVERABLE131상태를 복구할 수 없음
ERFKILL132RF-kill로 인해 연산이 불가능함
EHWPOISON133메모리 페이지에 하드웨어 오류가 있음

2.1. GNU C 라이브러리 (glibc) 추가 오류 코드

GNU C 라이브러리(GLIBC)는 헤더 파일에서 추가적인 POSIX 오류 값 매크로를 제공한다. 다음은 strerror가 제공하는 매크로에 대한 설명이다.

👆
좌우로 밀어서 보기
심볼설명
EPERM1연산이 허용되지 않음
ENOENT2파일 또는 디렉토리가 없음
ESRCH3프로세스가 없음
EINTR4인터럽트된 시스템 호출
EIO5입/출력 오류
ENXIO6장치 또는 주소가 없음
E2BIG7인자 목록이 너무 김
ENOEXEC8실행 형식 오류
EBADF9잘못된 파일 디스크립터
ECHILD10자식 프로세스가 없음
EAGAIN11리소스가 일시적으로 사용 불가능함
ENOMEM12메모리 할당 불가
EACCES13권한 거부
EFAULT14잘못된 주소
ENOTBLK15블록 장치가 필요함
EBUSY16장치 또는 리소스가 사용 중임
EEXIST17파일이 존재함
EXDEV18잘못된 장치 간 링크
ENODEV19장치가 없음
ENOTDIR20디렉토리가 아님
EISDIR21디렉토리임
EINVAL22잘못된 인자
ENFILE23시스템에 열린 파일이 너무 많음
EMFILE24열린 파일이 너무 많음
ENOTTY25장치에 부적절한 ioctl
ETXTBSY26텍스트 파일이 사용 중임
EFBIG27파일이 너무 큼
ENOSPC28장치에 공간이 없음
ESPIPE29불법 탐색
EROFS30읽기 전용 파일 시스템
EMLINK31링크가 너무 많음
EPIPE32파이프 손상
EDOM33수치 인자가 범위 밖임
ERANGE34수치 결과가 범위 밖임
EDEADLK35리소스 교착 상태 회피
ENAMETOOLONG36파일 이름이 너무 김
ENOLCK37사용 가능한 잠금이 없음
ENOSYS38함수가 구현되지 않음
ENOTEMPTY39디렉토리가 비어 있지 않음
ELOOP40심볼릭 링크 레벨이 너무 많음
ENOMSG42원하는 유형의 메시지가 없음
EIDRM43식별자가 제거됨
ECHRNG44채널 번호가 범위 밖임
EL2NSYNC45레벨 2가 동기화되지 않음
EL3HLT46레벨 3이 중지됨
EL3RST47레벨 3이 재설정됨
ELNRNG48링크 번호가 범위 밖임
EUNATCH49프로토콜 드라이버가 연결되지 않음
ENOCSI50CSI 구조를 사용할 수 없음
EL2HLT51레벨 2가 중지됨
EBADE52잘못된 교환
EBADR53잘못된 요청 디스크립터
EXFULL54교환이 가득 참
ENOANO55노드가 없음
EBADRQC56잘못된 요청 코드
EBADSLT57잘못된 슬롯
EBFONT59잘못된 글꼴 파일 형식
ENOSTR60장치가 스트림이 아님
ENODATA61사용 가능한 데이터가 없음
ETIME62타이머 만료
ENOSR63스트림 리소스 부족
ENONET64시스템이 네트워크에 연결되지 않음
ENOPKG65패키지가 설치되지 않음
EREMOTE66객체가 원격임
ENOLINK67링크가 끊어짐
EADV68광고 오류
ESRMNT69srmount 오류
ECOMM70전송 중 통신 오류
EPROTO71프로토콜 오류
EMULTIHOP72다중 홉 시도
EDOTDOT73RFS 관련 오류
EBADMSG74잘못된 메시지
EOVERFLOW75정의된 데이터 형식에 대한 값이 너무 큼
ENOTUNIQ76네트워크에서 이름이 고유하지 않음
EBADFD77파일 디스크립터 상태가 잘못됨
EREMCHG78원격 주소가 변경됨
ELIBACC79필요한 공유 라이브러리에 접근할 수 없음
ELIBBAD80손상된 공유 라이브러리에 접근함
ELIBSCN81a.out의 .lib 섹션이 손상됨
ELIBMAX82너무 많은 공유 라이브러리를 링크하려고 시도함
ELIBEXEC83공유 라이브러리를 직접 실행할 수 없음
EILSEQ84잘못되었거나 불완전한 멀티바이트 또는 와이드 문자
ERESTART85인터럽트된 시스템 호출을 다시 시작해야 함
ESTRPIPE86스트림 파이프 오류
EUSERS87사용자가 너무 많음
ENOTSOCK88소켓이 아닌 곳에서 소켓 연산
EDESTADDRREQ89대상 주소가 필요함
EMSGSIZE90메시지가 너무 큼
EPROTOTYPE91소켓에 대한 프로토콜 유형이 잘못됨
ENOPROTOOPT92프로토콜을 사용할 수 없음
EPROTONOSUPPORT93프로토콜이 지원되지 않음
ESOCKTNOSUPPORT94소켓 유형이 지원되지 않음
EOPNOTSUPP95연산이 지원되지 않음
EPFNOSUPPORT96프로토콜 패밀리가 지원되지 않음
EAFNOSUPPORT97프로토콜에서 지원하지 않는 주소 패밀리
EADDRINUSE98주소가 이미 사용 중임
EADDRNOTAVAIL99요청된 주소를 할당할 수 없음
ENETDOWN100네트워크가 다운됨
ENETUNREACH101네트워크에 연결할 수 없음
ENETRESET102네트워크가 재설정 시 연결을 끊음
ECONNABORTED103소프트웨어로 인해 연결이 중단됨
ECONNRESET104피어에 의해 연결이 재설정됨
ENOBUFS105사용 가능한 버퍼 공간이 없음
EISCONN106전송 엔드포인트가 이미 연결됨
ENOTCONN107전송 엔드포인트가 연결되지 않음
ESHUTDOWN108전송 엔드포인트가 종료된 후 보낼 수 없음
ETOOMANYREFS109참조가 너무 많음: 스플라이스 불가
ETIMEDOUT110연결 시간 초과
ECONNREFUSED111연결 거부
EHOSTDOWN112호스트가 다운됨
EHOSTUNREACH113호스트에 대한 경로 없음
EALREADY114연산이 이미 진행 중임
EINPROGRESS115연산이 현재 진행 중임
ESTALE116오래된 파일 핸들
EUCLEAN117구조를 정리해야 함
ENOTNAM118XENIX 명명된 유형 파일이 아님
ENAVAIL119사용 가능한 XENIX 세마포어가 없음
EISNAM120명명된 유형의 파일임
EREMOTEIO121원격 I/O 오류
EDQUOT122디스크 할당량 초과
ENOMEDIUM123매체를 찾을 수 없음
EMEDIUMTYPE124잘못된 매체 유형
ECANCELED125연산이 취소됨
ENOKEY126필요한 키를 사용할 수 없음
EKEYEXPIRED127키가 만료됨
EKEYREVOKED128키가 해지됨
EKEYREJECTED129키가 서비스에서 거부됨
EOWNERDEAD130소유자가 죽음
ENOTRECOVERABLE131상태를 복구할 수 없음
ERFKILL132RF-kill로 인해 연산이 불가능함
EHWPOISON133메모리 페이지에 하드웨어 오류가 있음