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;
}
블로그 이미지

자연&사람

행복한 개발자 programmer since 1995.

댓글을 달아 주세요