ERR(3)

명칭
err, verr, errc, verrc, errx, verrx, warn, vwarn, warnc, vwarnc, warnx, vwarnx, err_set_exit, err_set_file - 포맷 된 에러 메세지

프로그램 라이브러리
libc

서식
<err.h> void err(int eval, const char *fmt, ...) void err_set_exit(void (*exitf)(int)) void err_set_file(void *vfp) void errc(int eval, int code, const char *fmt, ...) void errx(int eval, const char *fmt, ...) void warn(const char *fmt, ...) void warnc(int code, const char *fmt, ...) void warnx(const char *fmt, ...) <stdarg.h> void verr(int eval, const char *fmt, va_list args) void verrc(int eval, int code, const char *fmt, va_list args) void verrx(int eval, const char *fmt, va_list args) void vwarn(const char *fmt, va_list args) void vwarnc(int code, const char *fmt, va_list args) void vwarnx(const char *fmt, va_list args)

해설
err() 함수와 warn() 함수의 패밀리는, 표준 에러 출력, 또는 err_set_file() 함수를 사용해 지정한 다른 파일상에 포맷 끝난 에러 메세지를 표시합니다. 모든 경우에, 프로그램명의 마지막 컴퍼넌트, 코론캐라크타, 및 스페이스가 출력됩니다. fmt 인수가 NULL 가 아닌 경우, printf(3) (와)과 같은 포맷 끝난 에러 메세지가 출력됩니다. 출력의 마지막에는 개행 캐릭터가 붙습니다.

err(), errc(), verr(), verrc(), warn(), warnc(), vwarn(), vwarnc() 의 함수는, code 또는 광역 변수 errno 에 따르는 에러 메세지를, 전에 코론과 공백을 붙여, 부가합니다. 다만, fmt 인수가 NULL 의 경우는 예외입니다.

errc(), verrc(), warnc(), 및 vwarnc() 의 각 함수의 경우, code 인수가 에러 메세지의 검색에 사용됩니다.

err(), verr(), warn(), 및 vwarn() 의 각 함수는, 글로벌 변수 errno (을)를 사용해 에러 메세지를 검색합니다.

errx() 함수 및 warnx() 함수는, 에러 메세지를 추가하지 않습니다.

err(), verr(), errc(), verrc(), errx(), 및 verrx() 의 각 함수는, 돌아오지 않습니다만, 인수 eval 의 값으로 종료합니다. err_set_exit() 함수를 사용해, exit(3) 의 전에 불려 가는 함수를 지정해, 필요한 클린 업을 실행할 수 있습니다. exitf 용으로 NULL 함수 포인터를 할당하면(자), 훅이 아무것도 하지 않게 리셋트 됩니다. 함수는, 다른 함수가 사용하는 출력 스트림을 설정합니다. vfp 인수는, 열려 있는 스트림 (이미 void * 에 변환되고 있을지도 모릅니다) 인가, NULL 포인터입니다 (이 경우 출력 스트림은 표준 에러로 설정됩니다).

예
현재의 errno 정보를 표시해 종료합니다.

    if ((p = malloc(size)) == NULL)
    	err(1, NULL);
    if ((fd = open(file_name, O_RDONLY, 0)) == -1)
    	err(1, "%s", file_name);

에러 메세지를 표시해 종료합니다.

    if (tm.tm_hour < START_TIME)
    	errx(1, "too early, wait until %s", start_time_string);

에러의 경고

    if ((fd = open(raw_device, O_RDONLY, 0)) == -1)
    	warnx("%s: %s: trying the block device",
    	    raw_device, strerror(errno));
    if ((fd = open(block_device, O_RDONLY, 0)) == -1)
    	err(1, "%s", block_device);

글로벌 변수 errno (을)를 사용하지 않는 에러의 경고

    error = my_function();	/* returns a value from <errno.h> */
    if (error ! = 0)
    	warnc(error, "my_function");

관련 항목
exit(3), printf(3), strerror(3)

역사
err() 함수와 warn() 함수는 최초로 4.4BSD 그리고 나타났습니다. err_set_exit() 함수 err_set_file() 함수는 최초로 FreeBSD 2.1 그리고 나타났습니다. errc() 함수와 warnc() 함수는 최초로 FreeBSD 3.0 그리고 나타났습니다.