Share via


errno, _doserrno, _sys_errlist 및 _sys_nerr

프로그램을 실행하는 동안 설정된 오류 코드를 보유한 전역 매크로와 표시용 오류 코드의 문자열에 해당하는 값입니다.

#define errno   (*_errno()) #define _doserrno   (*__doserrno()) #define _sys_errlist (__sys_errlist()) #define _sys_nerr (*__sys_nerr())

설명

errno와 _doserrno는 모두 프로그램을 시작하는 동안 런타임에 0으로 설정됩니다. errno는 오류가 발생한 시스템 수준 호출에서 설정됩니다. errno에 설정된 마지막 호출에 대한 값이 있으므로 이후 호출에 의해 이 값이 변경될 수도 있습니다. 오류에 대해 errno를 설정하는 런타임 라이브러리 호출은 성공 시 errno를 지우지 않습니다. 설정할 수 있는 호출 바로 전에 _set_errno(0)를 호출하여 항상 errno를 지우고 호출 후 바로 확인하세요.

오류 발생 시 errno를 시스템 호출에서 반환된 오류 코드와 동일한 값으로 설정할 필요가 없습니다. I/O 작업의 경우 _doserrno는 errno 코드에 대등한 운영 체제 오류 코드를 저장합니다. 대부분의 비I/O 작업의 경우 _doserrno 값이 설정되지 않습니다.

각 errno 값은 perror 함수 중 하나를 사용하여 인쇄하거나 strerror 또는 strerror_s 함수 중 하나를 사용하여 문자열에 저장할 수 있는 _sys_errlist의 오류 메시지와 연결되어 있습니다. perror 및 strerror 함수에서 _sys_errlist 배열 및 _sys_nerr(_sys_errlist에서 요소 수)을 사용하여 오류 정보를 처리합니다. _sys_errlist 및 _sys_nerr에 대한 직접 액세스는 코드 보안상의 이유로 사용되지 않습니다. 다음과 같이 전역 매크로 대신 더욱 안전한 기능 버전을 사용하는 것이 좋습니다.

전역 매크로

해당 기능

_doserrno

_get_doserrno, _set_doserrno

errno

_get_errno, _set_errno

_sys_errlist, _sys_nerr

strerror_s, _strerror_s, _wcserror_s, __wcserror_s

라이브러리 수학 루틴이 _matherr을 호출하여 errno를 설정합니다. 수학 오류를 다르게 처리하려면 _matherr 참조 설명에 따라 고유한 루틴을 작성하고 이름을 _matherr로 지정합니다.

다음 표에 있는 모든 errno 값은 <errno.h>에서 미리 정의된 상수이며 UNIX와 호환됩니다. ERANGE, EILSEQ 및 EDOM만 ISO C99 표준에 지정되어 있습니다.

상수

시스템 오류 메시지

EPERM

작업이 허용되지 않음

1

ENOENT

해당 파일 또는 디렉터리 없음

2

ESRCH

해당 프로세스 없음

3

EINTR

중단된 함수

4

EIO

I/O 오류

5

ENXIO

해당 장치 또는 주소 없음

6

E2BIG

인수 목록이 너무 김

7

ENOEXEC

실행 형식 오류

8

EBADF

잘못된 파일 번호

9

ECHILD

생성된 프로세스 없음

10

EAGAIN

추가 프로세스가 없거나 메모리가 부족하거나 최대 중첩 수주에 도달함

11

ENOMEM

메모리 부족

12

EACCES

사용 권한이 거부됨

13

EFAULT

잘못된 주소

14

EBUSY

장치 또는 리소스 사용 중

16

EEXIST

파일이 있음

17

EXDEV

장치 간 연결

18

ENODEV

해당 장치 없음

19

ENOTDIR

디렉터리가 아님

20

EISDIR

디렉터리임

21

EINVAL

잘못된 인수

22

ENFILE

시스템에 너무 많은 파일이 열려 있음

23

EMFILE

열려 있는 파일이 너무 많음

24

ENOTTY

부적절한 I/O 제어 작업

25

EFBIG

파일이 너무 큼

27

ENOSPC

장치에 남은 공간이 없음

28

ESPIPE

잘못된 검색

29

EROFS

읽기 전용 파일 시스템

30

EMLINK

링크가 너무 많음

31

EPIPE

파이프가 끊어짐

32

EDOM

산술 인수

33

ERANGE

결과가 너무 큼

34

EDEADLK

리소스 교착 상태가 발생함

36

EDEADLOCK

이전 Microsoft C 버전과의 호환성을 위해 EDEADLK와 동일

36

ENAMETOOLONG

파일 이름이 너무 김

38

ENOLCK

잠금을 사용할 수 없음

39

ENOSYS

함수가 지원되지 않음

40

ENOTEMPTY

디렉터리가 비어 있음

41

EILSEQ

바이트 시퀀스가 잘못됨

42

STRUNCATE

문자열이 잘림

80

요구 사항

전역 매크로

필수 헤더

선택적 헤더

errno

<errno.h> 또는 <stdlib.h>, <cerrno> 또는 <cstdlib>(C++)

_doserrno, _sys_errlist, _sys_nerr

<stdlib.h>, <cstdlib>(C++)

<errno.h>, <cerrno>(C++)

_doserrno, _sys_errlist_sys_nerr 매크로는 Microsoft 확장입니다. 호환성에 대한 자세한 내용은 호환성을 참조하십시오.

참고 항목

참조

전역 변수

errno 상수

perror, _wperror

strerror, _strerror, _wcserror, __wcserror

strerror_s, _strerror_s, _wcserror_s, __wcserror_s

_get_doserrno

_set_doserrno

_get_errno

_set_errno