strerror(3) - wariua/manpages-ko GitHub Wiki

NAME

strerror, strerror_r, strerror_l - 였λ₯˜ 번호λ₯Ό μ„€λͺ…ν•˜λŠ” λ¬Έμžμ—΄ λ°˜ν™˜

SYNOPSIS

#include <string.h>

char *strerror(int errnum);

int strerror_r(int errnum, char *buf, size_t buflen);
            /* XSI μ€€μˆ˜ */

char *strerror_r(int errnum, char *buf, size_t buflen);
            /* GNU μ „μš© */

char *strerror_l(int errnum, locale_t locale);

glibc κΈ°λŠ₯ 확인 맀크둜 μš”κ±΄ (feature_test_macros(7) μ°Έκ³ ):

strerror_r():
λ‹€μŒ κ²½μš°μ— XSI μ€€μˆ˜ 버전 제곡:
(_POSIX_C_SOURCE >= 200112L) && ! _GNU_SOURCE
μ•„λ‹ˆλ©΄ GNU μ „μš© 버전 제곡.

DESCRIPTION

strerror() ν•¨μˆ˜λŠ” errnum 인자둜 μ€€ 였λ₯˜ μ½”λ“œλ₯Ό μ„€λͺ…ν•˜λŠ” λ¬Έμžμ—΄ 포인터λ₯Ό λ°˜ν™˜ν•˜λ©°, ν˜„μž¬ 둜캘의 LC_MESSAGES μš”μ†Œλ‘œ μ μ ˆν•œ μ–Έμ–΄λ₯Ό 선택할 μˆ˜λ„ μžˆλ‹€. (예λ₯Ό λ“€μ–΄ errnumκ°€ EINVAL이면 λ°˜ν™˜λ˜λŠ” μ„€λͺ…이 "Invalid argument"이닀.) μ‘μš©μ—μ„œ κ·Έ λ¬Έμžμ—΄μ„ λ³€κ²½ν•΄μ„  μ•ˆ 되며, 후속 strerror() λ‚΄μ§€ strerror_l() ν˜ΈμΆœμ—μ„œ κ·Έ λ¬Έμžμ—΄μ„ λ³€κ²½ν•  수 μžˆλ‹€. perror(3)λ₯Ό ν¬ν•¨ν•œ λ‹€λ₯Έ 라이브러리 ν•¨μˆ˜λ“€μ€ 이 λ¬Έμžμ—΄μ„ λ³€κ²½ν•˜μ§€ μ•ŠλŠ”λ‹€.

strerror_r()

strerror_r() ν•¨μˆ˜λŠ” strerror()와 λΉ„μŠ·ν•˜λ˜ μŠ€λ ˆλ“œμ— μ•ˆμ „ν•˜λ‹€. 이 ν•¨μˆ˜λŠ” 두 κ°€μ§€ 버전이 μžˆλ‹€. POSIX.1-2001에 λͺ…μ„Έλœ XSI μ€€μˆ˜ 버전(glibc 2.3.4λΆ€ν„° μ‚¬μš© κ°€λŠ₯ν•˜μ§€λ§Œ glibc 2.13κΉŒμ§€λŠ” XSI μ€€μˆ˜ μ•„λ‹˜)κ³Ό GNU μ „μš© 버전(glibc 2.0λΆ€ν„° μ‚¬μš© κ°€λŠ₯)이닀. SYNOPSIS에 μžˆλŠ” κΈ°λŠ₯ 확인 맀크둜 κ΅¬μ„±μœΌλ‘œλŠ” XSI μ€€μˆ˜ 버전이 제곡되고, μ•„λ‹ˆλ©΄ GNU μ „μš© 버전이 μ œκ³΅λœλ‹€. λͺ…μ‹œμ μœΌλ‘œ μ–΄λ–€ κΈ°λŠ₯ 확인 λ§€ν¬λ‘œλ„ μ •μ˜ν•˜μ§€ μ•ŠμœΌλ©΄ (glibc 2.4λΆ€ν„°) 기본적으둜 _POSIX_C_SOURCEκ°€ 200112L κ°’μœΌλ‘œ μ •μ˜λ˜κ³ , κ·Έλž˜μ„œ strerror_r()의 XSI μ€€μˆ˜ 버전이 기본적으둜 μ œκ³΅λœλ‹€.

이식 κ°€λŠ₯ν•œ μ‘μš©μ—μ„œλŠ” XSI μ€€μˆ˜ strerror_r()κ°€ λ°”λžŒμ§ν•˜λ‹€. μ‚¬μš©μžκ°€ μ œκ³΅ν•˜λŠ” buflen 길이의 버퍼 buf둜 였λ₯˜ λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•œλ‹€.

GNU μ „μš© strerror_r()은 였λ₯˜ λ©”μ‹œμ§€λ₯Ό 담은 λ¬Έμžμ—΄μ— λŒ€ν•œ 포인터λ₯Ό λ°˜ν™˜ν•œλ‹€. ν•¨μˆ˜μ—μ„œ buf에 μ €μž₯ν•œ λ¬Έμžμ—΄μ— λŒ€ν•œ 포인터일 μˆ˜λ„ 있고 (bufλ₯Ό μ“°μ§€ μ•ŠλŠ” κ²½μš°μ—λŠ”) μ–΄λ–€ (λΆˆλ³€) 정적 λ¬Έμžμ—΄μ— λŒ€ν•œ 포인터일 μˆ˜λ„ μžˆλ‹€. ν•¨μˆ˜μ—μ„œ buf에 λ¬Έμžμ—΄μ„ μ €μž₯ν•˜λŠ” κ²½μš°μ—λŠ” μ΅œλŒ€ buflen λ°”μ΄νŠΈκ°€ μ €μž₯λœλ‹€. (buflen이 λ„ˆλ¬΄ μž‘κ³  errnumκ°€ μ•Œ 수 μ—†λŠ” 값이면 λ¬Έμžμ—΄μ΄ 잘렀 μžˆμ„ 수 μžˆλ‹€.) κ·Έ λ¬Έμžμ—΄μ—λŠ” 항상 μ’…λ£Œμš© 널 λ°”μ΄νŠΈ('\0')κ°€ λ“€μ–΄κ°„λ‹€.

strerror_l()

strerror_l()은 strerror()와 λΉ„μŠ·ν•˜λ˜ errnum을 locale에 μ§€μ •ν•œ 둜캘의 둜캘 의쑴적 였λ₯˜ λ©”μ‹œμ§€λ‘œ μ—°κ²°ν•œλ‹€. locale이 특수 둜캘 객체 LC_GLOBAL_LOCALEμ΄κ±°λ‚˜ μœ νš¨ν•œ 둜캘 객체 핸듀이 μ•„λ‹Œ 경우 strerror_l()의 λ™μž‘ 방식은 κ·œμ •λΌ μžˆμ§€ μ•Šλ‹€.

RETURN VALUE

strerror(), strerror_l(), GNU μ „μš© strerror_r() ν•¨μˆ˜λŠ” μ μ ˆν•œ 였λ₯˜ μ„€λͺ… λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•œλ‹€. μ•Œ 수 μ—†λŠ” 였λ₯˜ 번호면 "Unknown error nnn" λ©”μ‹œμ§€λ₯Ό λ°˜ν™˜ν•œλ‹€.

XSI μ€€μˆ˜ strerror_r() ν•¨μˆ˜λŠ” 성곡 μ‹œ 0을 λ°˜ν™˜ν•œλ‹€. 였λ₯˜ μ‹œ (μ–‘μˆ˜) 였λ₯˜ 번호λ₯Ό λ°˜ν™˜ν•˜κ±°λ‚˜ (glibc 2.13λΆ€ν„°), -1을 λ°˜ν™˜ν•˜κ³  였λ₯˜λ₯Ό λ‚˜νƒ€λ‚΄λ„λ‘ errnoλ₯Ό μ„€μ •ν•œλ‹€ (glibc 버전 2.13 μ „).

POSIX.1-2001κ³Ό POSIX.1-2008μ—μ„œλŠ” strerror()λ‚˜ strerror_l() 호좜 성곡 μ‹œ errnoλ₯Ό λ°”κΎΈμ§€ μ•Šμ•„μ•Ό ν•œλ‹€κ³  μš”κ΅¬ν•˜κ³  있으며, 였λ₯˜λ₯Ό λ‚˜νƒ€λ‚΄κΈ° μœ„ν•œ ν•¨μˆ˜ λ°˜ν™˜ 값이 μ—†κΈ° λ•Œλ¬Έμ— μ‘μš©μ—μ„œ 호좜 전에 errnoλ₯Ό 0으둜 μ„€μ •ν•˜κ³  호좜 후에 errnoλ₯Ό 확인해야 ν•œλ‹€κ³  μ–ΈκΈ‰ν•œλ‹€.

ERRORS

EINVAL
errnum 값이 μœ νš¨ν•œ 였λ₯˜ λ²ˆν˜Έκ°€ μ•„λ‹ˆλ‹€.
ERANGE
제곡 μ €μž₯ 곡간이 였λ₯˜ μ„€λͺ… λ¬Έμžμ—΄μ„ 담기에 μΆ©λΆ„ν•˜μ§€ μ•Šλ‹€.

VERSIONS

glibc 2.6μ—μ„œ strerror_l() ν•¨μˆ˜κ°€ 처음 λ“±μž₯ν–ˆλ‹€.

ATTRIBUTES

이 μ ˆμ—μ„œ μ‚¬μš©ν•˜λŠ” μš©μ–΄λ“€μ— λŒ€ν•œ μ„€λͺ…은 attributes(7)λ₯Ό 보라.

μΈν„°νŽ˜μ΄μŠ€ 속성 κ°’
strerror() μŠ€λ ˆλ“œ μ•ˆμ „μ„± MT-Unsafe race:strerror
strerror_r(),
strerror_l()
μŠ€λ ˆλ“œ μ•ˆμ „μ„± MT-Safe

CONFORMING TO

strerror()λŠ” POSIX.1-2001, POSIX.1-2008, C89, C99에 λͺ…세돼 μžˆλ‹€. strerror_r()은 POSIX.1-2001, POSIX.1-2008에 λͺ…세돼 μžˆλ‹€.

strerror_l()은 POSIX.1-2008에 λͺ…세돼 μžˆλ‹€.

GNU μ „μš© strerror_r() ν•¨μˆ˜λŠ” λΉ„ν‘œμ€€ ν™•μž₯이닀.

POSIX.1-2001μ—μ„œλŠ” strerror() ν˜ΈμΆœμ—μ„œ 였λ₯˜λ₯Ό λ§Œλ‚œ 경우 errnoλ₯Ό μ„€μ •ν•˜λŠ” 건 ν—ˆμš©ν•˜μ§€λ§Œ 였λ₯˜ μ‹œμ— ν•¨μˆ˜ 결과둜 μ–΄λ–€ 값을 λ°˜ν™˜ν•΄μ•Ό ν•˜λŠ”μ§€λŠ” λͺ…μ‹œν•˜μ§€ μ•Šκ³  μžˆλ‹€. μ–΄λ–€ μ‹œμŠ€ν…œμ—μ„œλŠ” μ•Œ 수 μ—†λŠ” 였λ₯˜ 번호인 경우 NULL을 λ°˜ν™˜ν•œλ‹€. λ‹€λ₯Έ μ‹œμŠ€ν…œμ—μ„œλŠ” μ•Œ 수 μ—†λŠ” 였λ₯˜ 번호인 경우 strerror()κ°€ "Error nnn occurred" λΉ„μŠ·ν•œ λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•˜κ³  errnoλ₯Ό EINVAL둜 μ„€μ •ν•œλ‹€. C99와 POSIX.1-2008μ—μ„œλŠ” λ°˜ν™˜ 값이 NULL이 μ•„λ‹ˆμ–΄μ•Ό ν•œλ‹€κ³  μš”κ΅¬ν•œλ‹€.

NOTES

GNU C λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œλŠ” strerror()에 1024개 문자둜 된 버퍼λ₯Ό μ“΄λ‹€. 이 크기면 strerror_r() 호좜 μ‹œ ERANGE 였λ₯˜λ₯Ό ν”Όν•˜κΈ°μ— μΆ©λΆ„ν•  것이닀.

SEE ALSO

err(3), errno(3), error(3), perror(3), strsignal(3), locale(7)


2019-03-06

⚠️ **GitHub.com Fallback** ⚠️