realpath(3) - wariua/manpages-ko GitHub Wiki
realpath - μ κ·ν λ μ λ κ²½λ‘λͺ λ°ν
#include <limits.h>
#include <stdlib.h>
char *realpath(const char *path, char *resolved_path);
glibc κΈ°λ₯ νμΈ λ§€ν¬λ‘ μ건 (feature_test_macros(7) μ°Έκ³ ):
-
realpath()
: -
_XOPEN_SOURCE >= 500
|| /* glibc 2.19λΆν°: */ _DEFAULT_SOURCE
|| /* glibc λ²μ <= 2.19: */ _BSD_SOURCE
realpath()
λ λ μ’
λ£ λ¬Έμμ΄ path
μμ μ¬λ³Όλ¦ λ§ν¬λ₯Ό λͺ¨λ νμ₯νκ³ /./
, /../
, μ€λ³΅ '/
' λ¬Έμλ₯Ό νμ΄μ μ κ·ν λ μ λ κ²½λ‘λͺ
μ λ§λ€μ΄ λΈλ€. κ²°κ³Όλ‘ λμ¨ κ²½λ‘λͺ
μ resolved_path
κ° κ°λ¦¬ν€λ λ²νΌμ μ΅λ PATH_MAX
λ°μ΄νΈκΉμ§μ λ μ’
λ£ λ¬Έμμ΄λ‘ μ μ₯νλ€. κ²°κ³Ό κ²½λ‘μλ μ¬λ³Όλ¦ λ§ν¬λ /./
, /../
μμκ° μκ² λλ€.
resolved_path
λ₯Ό NULLλ‘ μ§μ νλ©΄ realpath()
μμ malloc(3)μ μ¬μ©ν΄ νλ¦° κ²½λ‘λͺ
μ λ΄μ μ΅λ PATH_MAX
λ°μ΄νΈ λ²νΌλ₯Ό ν λΉνκ³ κ·Έ λ²νΌμ λν ν¬μΈν°λ₯Ό λ°ννλ€. νΈμΆμκ° free(3)λ₯Ό μ¨μ κ·Έ λ²νΌλ₯Ό ν΄μ ν΄μΌ νλ€.
μ€λ₯κ° μμΌλ©΄ realpath()
λ resolved_path
μ λν ν¬μΈν°λ₯Ό λ°ννλ€.
μλλ©΄ NULLμ λ°ννλ©° κ·Έλ λ°°μ΄ resolved_path
μ λ΄μ©μ κ·μ λΌ μμ§ μλ€. κ·Έλ¦¬κ³ μ€λ₯λ₯Ό λνλ΄λλ‘ errno
λ₯Ό μ€μ νλ€.
EACCES
- κ²½λ‘ μ λλΆμ μ΄λ μμμ λν΄ μ½κΈ° λ΄μ§ νμ κΆνμ΄ κ±°λΆλμλ€.
EINVAL
-
path
κ° NULLμ΄λ€. (glibc λ²μ 2.3 μ μμλresolved_path
κ° NULLμΈ κ²½μ°μλ μ΄ μ€λ₯λ₯Ό λ°ννλ€.) EIO
- νμΌ μμ€ν μμ μ½κΈ°λ₯Ό νλ λμ I/O μ€λ₯κ° λ°μνλ€.
ELOOP
- κ²½λ‘λͺ μ λ³ννλ λμ λ무 λ§μ μ¬λ³Όλ¦ λ§ν¬λ₯Ό λ§λ¬λ€.
ENAMETOOLONG
- κ²½λ‘λͺ
μ μ΄λ μμκ°
NAME_MAX
κΈμλ₯Ό λμλ€. λλ μ 체 κ²½λ‘λͺ μ΄PATH_MAX
κΈμλ₯Ό λμλ€. ENOENT
- ν΄λΉ νμΌμ΄ μ‘΄μ¬νμ§ μλλ€.
ENOMEM
- λ©λͺ¨λ¦¬ λΆμ‘±.
ENOTDIR
- κ²½λ‘ μ λλΆμ ν μμκ° λλ ν°λ¦¬κ° μλλ€.
μ΄ μ μμ μ¬μ©νλ μ©μ΄λ€μ λν μ€λͺ μ attributes(7)λ₯Ό 보λΌ.
μΈν°νμ΄μ€ | μμ± | κ° |
---|---|---|
realpath() |
μ€λ λ μμ μ± | MT-Safe |
4.4BSD, POSIX-1.2001.
POSIX.1-2001μμλ resolved_path
κ° NULLμΌ λμ λμμ ꡬνμμ κ·μ νλ€κ³ νλ€. POSIX.1-2008μμλ μ΄ νμ΄μ§μμ κΈ°μ νλ λμ λ°©μμ λͺ
μΈνλ€.
4.4BSDμ μλΌλ¦¬μ€μμ κ²½λ‘λͺ
κΈΈμ΄ μ νμ (<sys/param.h>
μ μλ) MAXPATHLEN
μ΄λ€. SUSv2μμλ <limits.h>
μ μκ±°λ pathconf(3) ν¨μλ‘ μ»μ μ μλ PATH_MAX
λ° NAME_MAX
λ₯Ό κ·μ νκ³ μλ€. μΌλ°μ μΌλ‘ μμ€κ° λ€μκ³Ό κ°μ΄ λ κ²μ΄λ€.
#ifdef PATH_MAX
path_max = PATH_MAX;
#else
path_max = pathconf(path, _PC_PATH_MAX);
if (path_max <= 0)
path_max = 4096;
#endif
(νμ§λ§ BUGS μ μ°Έκ³ .)
νΈμΆμ΄ EACCES
λ ENOENT
λ‘ μ€ν¨νκ³ resolved_path
κ° NULLμ΄ μλλ©΄ μ½κΈ° κ°λ₯νμ§ μκ±°λ μ‘΄μ¬νμ§ μμ path
μ μ λλΆλ₯Ό resolved_path
λ‘ λ°ννλ€.
μ΄ ν¨μμ POSIX.1-2001 νμ€ λ²μ μλ μ€κ³μ κ²°ν¨μ΄ μλ€. μΆλ ₯ λ²νΌ resolved_path
μ μ μ ν ν¬κΈ°λ₯Ό κ²°μ νλ κ²μ΄ λΆκ°λ₯νκΈ° λλ¬Έμ΄λ€. POSIX.1-2001μ λ°λ₯΄λ©΄ PATH_MAX
ν¬κΈ°μ λ²νΌλ‘ μΆ©λΆνμ§λ§ PATH_MAX
κ° κΌ μμλ‘ μ μλμ΄ μμ΄μΌ νλ κ²μ΄ μλκ³ pathconf(3)λ‘ μ»μ΄μΌ ν μλ μλ€. κ·Έλ°λ° pathconf(3)μ 묻λ κ²μ΄ μ€μ λ‘ λμμ΄ λμ§ μλ κ²μ΄, ννΈμΌλ‘λ POSIXμμ pathconf(3)μ κ²°κ³Όκ° μμ£Ό 컀μ λ©λͺ¨λ¦¬ ν λΉμ λΆμ ν©ν μλ μλ€κ³ κ²½κ³ νκ³ μμΌλ©° λν pathconf(3)κ° PATH_MAX
μ μ νμ΄ μμμ λ»νλ -1μ λ°νν μλ μλ€. POSIX.1-2001μ νμ€νλμ΄ μμ§ μμ§λ§ POSIX.1-2008μλ νμ€νλμ΄ μλ resolved_path == NULL
κΈ°λ₯μ ν΅ν΄ μ΄ μ€κ³ λ¬Έμ λ₯Ό νΌν μ μλ€.
realpath(1)
, readlink(2), canonicalize_file_name(3), getcwd(3), pathconf(3), sysconf(3)
2017-09-15