C언어 header/string.h
strerror_r(3) - 오류번호를 오류 메세지로
자연&사람
2019. 9. 25. 23:02
반응형
strerror_r(3)
#include <string.h>
/* XSI-compliant */
int strerror_r(int errnum, char *buf, size_t buflen);
/* GNU-specific */
char *strerror_r(int errnum, char *buf, size_t buflen);
시스템 오류 번호에 대한 오류 메시지를 문자열로 반환하는 함수입니다. 주로 시스템 콜 함수들이나 내부적으로 시스템 콜 함수를 사용하는 함수들에서 설정된 errno 전역변수 값을 문자열로 변환합니다. 이 함수는 strerror(3)함수가 Multi-Thread unsafe한 함수이므로 대체하기 위하여 만들어진 함수입니다. 변수 buf에 저장되는 문자열은 null-terminated 문자열입니다.
errno 전역변수는 errno.h에 포함되어 있습니다.
strerror_r(3)함수는 시스템마다 return type이 다르므로 return 값을 활용하지 않는 것이 좋겠습니다.
※정보: errno 전역변수는 전역변수처럼 보이기 때문에 Multi-Thread에 안전하지 않은 것 같지만, thread 마다 다르게 관리되므로 Multi-thread에 안전합니다.
파라미터
errnum
- 오류 메세지로 변환할 오류번호
buf
- 오류 메세지가 저장될 buffer
buf_len
- 오류 메세지가 저장될 buf 변수의 크기
RETURN
XSI-compliant version
- 정상이면 0을 return하고, 그렇지 않으면 -1을 return 합니다.
- 오류이면, errno에 오류번호를 설정합니다.
EINVAL : 유효하지 않은 오류입니다.
ERANGE : 오류를 저장할 충분한 buf가 안됩니다.
GNU-specific
- buf를 return합니다.
활용 예제
#include <errno.h>
#include <string.h>
#include <stdio.h>
int main(int argc, char **argv)
{
FILE *fp;
char buf[128];
if((fp = fopen(argv[1], "r")) == NULL) {
strerror_r(errno, buf, 128);
fprintf(stderr, "errno[%d] : %s\n", errno, buf);
return 1;
}
......
return 0;
}
반응형