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

NAME

realpath - μ •κ·œν™” 된 μ ˆλŒ€ 경둜λͺ… λ°˜ν™˜

SYNOPSIS

#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

DESCRIPTION

realpath()λŠ” 널 μ’…λ£Œ λ¬Έμžμ—΄ pathμ—μ„œ 심볼릭 링크λ₯Ό λͺ¨λ‘ ν™•μž₯ν•˜κ³  /./, /../, 쀑볡 '/' 문자λ₯Ό ν’€μ–΄μ„œ μ •κ·œν™” 된 μ ˆλŒ€ 경둜λͺ…을 λ§Œλ“€μ–΄ λ‚Έλ‹€. 결과둜 λ‚˜μ˜¨ 경둜λͺ…을 resolved_pathκ°€ κ°€λ¦¬ν‚€λŠ” 버퍼에 μ΅œλŒ€ PATH_MAX λ°”μ΄νŠΈκΉŒμ§€μ˜ 널 μ’…λ£Œ λ¬Έμžμ—΄λ‘œ μ €μž₯ν•œλ‹€. κ²°κ³Ό κ²½λ‘œμ—λŠ” 심볼릭 λ§ν¬λ‚˜ /./, /../ μš”μ†Œκ°€ μ—†κ²Œ λœλ‹€.

resolved_pathλ₯Ό NULL둜 μ§€μ •ν•˜λ©΄ realpath()μ—μ„œ malloc(3)을 μ‚¬μš©ν•΄ ν’€λ¦° 경둜λͺ…을 담을 μ΅œλŒ€ PATH_MAX λ°”μ΄νŠΈ 버퍼λ₯Ό ν• λ‹Ήν•˜κ³  κ·Έ 버퍼에 λŒ€ν•œ 포인터λ₯Ό λ°˜ν™˜ν•œλ‹€. ν˜ΈμΆœμžκ°€ free(3)λ₯Ό μ¨μ„œ κ·Έ 버퍼λ₯Ό ν•΄μ œν•΄μ•Ό ν•œλ‹€.

RETURN VALUE

였λ₯˜κ°€ μ—†μœΌλ©΄ realpath()λŠ” resolved_path에 λŒ€ν•œ 포인터λ₯Ό λ°˜ν™˜ν•œλ‹€.

μ•„λ‹ˆλ©΄ NULL을 λ°˜ν™˜ν•˜λ©° κ·Έλ•Œ λ°°μ—΄ resolved_path의 λ‚΄μš©μ€ κ·œμ •λΌ μžˆμ§€ μ•Šλ‹€. 그리고 였λ₯˜λ₯Ό λ‚˜νƒ€λ‚΄λ„λ‘ errnoλ₯Ό μ„€μ •ν•œλ‹€.

ERRORS

EACCES
경둜 μ„ λ‘λΆ€μ˜ μ–΄λŠ μš”μ†Œμ— λŒ€ν•΄ 읽기 λ‚΄μ§€ 탐색 κΆŒν•œμ΄ κ±°λΆ€λ˜μ—ˆλ‹€.
EINVAL
pathκ°€ NULL이닀. (glibc 버전 2.3 μ „μ—μ„œλŠ” resolved_pathκ°€ NULL인 κ²½μš°μ—λ„ 이 였λ₯˜λ₯Ό λ°˜ν™˜ν•œλ‹€.)
EIO
파일 μ‹œμŠ€ν…œμ—μ„œ 읽기λ₯Ό ν•˜λŠ” λ™μ•ˆ I/O 였λ₯˜κ°€ λ°œμƒν–ˆλ‹€.
ELOOP
경둜λͺ…을 λ³€ν™˜ν•˜λŠ” λ™μ•ˆ λ„ˆλ¬΄ λ§Žμ€ 심볼릭 링크λ₯Ό λ§Œλ‚¬λ‹€.
ENAMETOOLONG
경둜λͺ…μ˜ μ–΄λŠ μš”μ†Œκ°€ NAME_MAX κΈ€μžλ₯Ό λ„˜μ—ˆλ‹€. λ˜λŠ” 전체 경둜λͺ…이 PATH_MAX κΈ€μžλ₯Ό λ„˜μ—ˆλ‹€.
ENOENT
ν•΄λ‹Ή 파일이 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.
ENOMEM
λ©”λͺ¨λ¦¬ λΆ€μ‘±.
ENOTDIR
경둜 μ„ λ‘λΆ€μ˜ ν•œ μš”μ†Œκ°€ 디렉터리가 μ•„λ‹ˆλ‹€.

ATTRIBUTES

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

μΈν„°νŽ˜μ΄μŠ€ 속성 κ°’
realpath() μŠ€λ ˆλ“œ μ•ˆμ „μ„± MT-Safe

CONFORMING TO

4.4BSD, POSIX-1.2001.

POSIX.1-2001μ—μ„œλŠ” resolved_pathκ°€ NULL일 λ•Œμ˜ λ™μž‘μ„ κ΅¬ν˜„μ—μ„œ κ·œμ •ν•œλ‹€κ³  ν•œλ‹€. POSIX.1-2008μ—μ„œλŠ” 이 νŽ˜μ΄μ§€μ—μ„œ κΈ°μˆ ν•˜λŠ” λ™μž‘ 방식을 λͺ…μ„Έν•œλ‹€.

NOTES

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 절 μ°Έκ³ .)

GNU ν™•μž₯

호좜이 EACCESλ‚˜ ENOENT둜 μ‹€νŒ¨ν•˜κ³  resolved_pathκ°€ NULL이 μ•„λ‹ˆλ©΄ 읽기 κ°€λŠ₯ν•˜μ§€ μ•Šκ±°λ‚˜ μ‘΄μž¬ν•˜μ§€ μ•Šμ€ path의 선두뢀λ₯Ό resolved_path둜 λ°˜ν™˜ν•œλ‹€.

BUGS

이 ν•¨μˆ˜μ˜ 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 κΈ°λŠ₯을 톡해 이 섀계 문제λ₯Ό ν”Όν•  수 μžˆλ‹€.

SEE ALSO

realpath(1), readlink(2), canonicalize_file_name(3), getcwd(3), pathconf(3), sysconf(3)


2017-09-15

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