참고
errno
man 2 intro
를 하거나 man 2 errno
를 하면 볼 수 있다.
- 시스템 콜과 error number들에 대한 전반적인 정의와 컨셉에 대한 설명
#include <sys/errno.h>
- 거의 모든 시스템 콜들은
extern int errno
으로 전역변수 errno을 제공한다.
- 시스템 콜이 에러를 탐지했으면 보통 실패를 뜻하는 -1을 리턴하고, 전역변수 errno을 특정 값으로 세팅하여 어떤 에러가 일어났는지 알려준다.
- 0은 사용되지 않고, 1~102까지의 숫자가 특정의미로 쓰인다. (너무 많으니 man에서 검색해서 보자)
- 용어 정의는 에러넘버만 볼때는 중요하지 않다. fork, exec, wait, exit man으로 알아보기에서 필요할 때 다시 보자.
- 주의해야할 점은 에러 넘버가 가진 값을 exit()에 인자로 넣어서 프로세스를 종료해야할 것 같지만 sysexits(3)에 정의된 exit 값들과 errno는 전혀 상관 없다는 점이다. fork, exec, wait, exit man으로 알아보기를 보자
perror
man 3 perror
나 man 3 strerror
를 하면 볼 수 있다.
#include <stdio.h>
void perror(const char*s);
extern const char * const sts_errlist[];
extern const int sts_nerr;
- error number에 따른 에러 메세지를 확인 한다.
- 전역변수 errno에 값에 따른 에러메세지를 새 줄과 함께 표준 에러 file descriptor에 출력한다.
s 문자열이 NULL이 아니면 에러 메세지 앞에 문자열이 출력되고 “: “ 콜론과 스페이스로 구분된다.
NULL인 경우 그냥 에러 메세지만 출력된다.