STRERROR(3)

명칭
perror, strerror, strerror_r, sys_errlist, sys_nerr - 시스템의 에러 메세지

프로그램 라이브러리
libc

서식
<stdio.h> void perror(const char *string) extern const char * const sys_errlist[]; extern const int sys_nerr; <string.h> char * strerror(int errnum) int strerror_r(int errnum, char * strerrbuf, size_t buflen)

해설
strerror(), strerror_r() 및 perror() 함수는, 에러 번호에 대응하는 에러 메세지 캐릭터 라인을 찾아냅니다.

strerror() 함수는, 에러 번호의 인수 errnum (을)를 받아, 거기에 대응하는 메세지 캐릭터 라인에의 포인터를 돌려줍니다.

strerror_r() 함수는, 같은 결과를 최대 buflen 캐릭터수의 strerrbuf 에 고쳐, 성공했을 경우는 0 을 돌려줍니다.

perror() 함수는, 광역 변수 errno (intro(2)) 의 현재의 값에 대응하는 에러 메세지를 찾아, 거기에 개행을 붙여 표준 에러 파일 기술자에게 기록. 인수 string 하지만 눌 이외여, 눌 캐릭터를 가리키지 않는 경우는, 이 캐릭터 라인은 메세지 캐릭터 라인의 전에 코론과 스페이스 (‘: ’); 그리고 단락지어 추가됩니다. 그 이외의 경우는, 에러 메세지 캐릭터 라인만이 인자됩니다.

errnum 하지만 에러 번호로서 인식할 수 없는 경우는, strerror() (은)는, “Unknown error: ” 의 에러 메세지 캐릭터 라인의 뒤에, 10 진수의 에러 번호를 돌려주어, errno 에 EINVAL (을)를 세트 합니다. strerror_r() (은)는, strerrbuf (을)를 변경하지 않고 EINVAL (을)를 돌려줍니다. 에러 번호가 0 <= errnum < sys_nerr 안의 실장에서는, 인식할 수 없습니다.

에러 캐릭터 라인을 포함한다 ( buflen 그리고 지정되어 있는 것보다) strerrbuf 하지만 불충분한 area의 경우, strerror_r() 하 ERANGE (을)를 돌려주어, strerrbuf 에는, buflen 그리고 지정되었다 눌 캐릭터로 종료하는 길이의 잘라 버린 에러 메세지가 들어갑니다.

메세지 캐릭터 라인에는, 외부 배열 sys_errlist (을)를 사용해 직접 액세스 할 수가 있습니다. 외부치 sys_nerr 에는 sys_errlist 의 안에 있는 메세지의 카운트가 들어가 있습니다. 이러한 변수를 사용하는 것에는 찬성할 수 없습니다. 대신에, strerror() 또는 strerror_r() (을)를 사용하는 것이 좋을 것입니다.

참조
intro(2), psignal(3)

역사
strerror() 및 perror() 함수는, 4.4BSD 그리고 처음 등장했습니다. strerror_r() 함수는, Wes Peters <wes@freebsd.org>. 에 의해 FreeBSD 4.4 그리고 실장되었습니다.

버그
인식할 수 없는 에러 번호에 대해서는, strerror() 함수는 그 결과를 정적 버퍼에 돌려주어, 그것은 이후의 호출에 의해 덧쓰기될 가능성이 있습니다.

sys_errlist 변수를 사용하고 있는 바람직하지 않은 프로그램은, 그 변수를 일관성 없게 선언하기 위해서 실패하는 것이 자주 있습니다.