basename(3) - wariua/manpages-ko GitHub Wiki
basename, dirname - ๊ฒฝ๋ก๋ช ์์ ํ์ฑ ํ๊ธฐ
#include <libgen.h>
char *dirname(char *path);
char *basename(char *path);
์ฃผ์: ๋ ๊ฐ์ง ๋ค๋ฅธ basename()
ํจ์๊ฐ ์๋ค. ์๋ ์ฐธ๊ณ .
dirname()
๋ฐ basename()
ํจ์๋ ๋๋ก ๋๋๋ ๊ฒฝ๋ก๋ช
๋ฌธ์์ด์ ๋๋ ํฐ๋ฆฌ ๋ถ๋ถ๊ณผ ํ์ผ๋ช
๋ถ๋ถ์ผ๋ก ๋๋๋ค. ๋ณดํต ๊ฒฝ์ฐ์ dirname()
์ ๋ง์ง๋ง '/' ์ ๊น์ง์ ๋ฌธ์์ด์ ๋ฐํํ๊ณ basename()
์ ๊ทธ ๋ง์ง๋ง '/' ๋ค์ ๋ถ๋ถ์ ๋ฐํํ๋ค. ๋์ ๋ถ์ '/' ๋ฌธ์๋ ๊ฒฝ๋ก๋ช
์ ํฌํจ์ํค์ง ์๋๋ค.
path
์์ ์ฌ๋์๊ฐ ์์ผ๋ฉด dirname()
์ ๋ฌธ์์ด "."์ ๋ฐํํ๊ณ basename()
์ path
์ ์ฌ๋ณธ์ ๋ฐํํ๋ค. path
๊ฐ ๋ฌธ์์ด "/"์ด๋ฉด dirname()
๊ณผ basename()
๋ชจ๋ ๋ฌธ์์ด "/"๋ฅผ ๋ฐํํ๋ค. path
๊ฐ ๋ ํฌ์ธํฐ๊ฑฐ๋ ๋น ๋ฌธ์์ด์ ๋ํ ํฌ์ธํฐ๋ฉด dirname()
๊ณผ basename()
๋ชจ๋ ๋ฌธ์์ด "."๋ฅผ ๋ฐํํ๋ค.
dirname()
์ด ๋ฐํํ ๋ฌธ์์ด, "/", basename()
์ด ๋ฐํํ ๋ฌธ์์ด์ ์ด์ด ๋ถ์ด๋ฉด ์์ ํ ๊ฒฝ๋ก๋ช
์ด ๋์จ๋ค.
dirname()
๊ณผ basename()
์์ path
์ ๋ด์ฉ์ ๋ณ๊ฒฝํ ์๋ ์์ผ๋ฏ๋ก ์ด ํจ์๋ค์ ํธ์ถํ ๋๋ ์ฌ๋ณธ์ ์ ๋ฌํ๋ ๊ฒ ๋ฐ๋์งํ ์๋ ์๋ค.
์ด ํจ์๋ค์ด ์ ์ ์ผ๋ก ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ํฌ์ธํฐ๋ฅผ ๋ฐํํ ์ ์๊ณ ์ด์ด์ง๋ ํธ์ถ์์ ๊ทธ ๋ฉ๋ชจ๋ฆฌ์ ๋ฎ์ด ์ธ ์๋ ์๋ค. ๋๋ path
์ ์ผ๋ถ๋ถ์ ๋ํ ํฌ์ธํฐ๋ฅผ ๋ฐํํ ์๋ ์์ผ๋ฏ๋ก ํจ์๊ฐ ๋ฐํํ ํฌ์ธํฐ๊ฐ ๋๋ ํ์์น ์๊ฒ ๋ ๋๊น์ง๋ path
๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ํด์ ํ์ง ๋ง์์ผ ํ๋ค.
(SUSv2์์ ๊ฐ์ ธ์จ) ๋ค์ ์์ ๋ชฉ๋ก์ ์ฌ๋ฌ ๊ฒฝ๋ก์ ๋ํด dirname()
๊ณผ basename()
์ด ๋ฐํํ๋ ๋ฌธ์์ด์ ๋ณด์ฌ ์ค๋ค.
๊ฒฝ๋ก | dirname | basename |
---|---|---|
/usr/lib |
/usr |
lib |
/usr/ |
/ |
usr |
usr |
. |
usr |
/ |
/ |
/ |
. |
. |
. |
.. |
. |
.. |
dirname()
๊ณผ basename()
๋ชจ๋ ๋ ์ข
๋ฃ ๋ฌธ์์ด์ ๋ํ ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ค. (์ด ํฌ์ธํฐ๋ฅผ free(3)๋ก ์ ๋ฌํด์ ์ ๋๋ค.)
์ด ์ ์์ ์ฌ์ฉํ๋ ์ฉ์ด๋ค์ ๋ํ ์ค๋ช ์ attributes(7)๋ฅผ ๋ณด๋ผ.
์ธํฐํ์ด์ค | ์์ฑ | ๊ฐ |
---|---|---|
basename() , dirname()
|
์ค๋ ๋ ์์ ์ฑ | MT-Safe |
POSIX.1-2001, POSIX.1-2008.
๋ ๊ฐ์ง ์๋ก ๋ค๋ฅธ basename()
๋ฒ์ ์ด ์๋ค. ์์์ ๊ธฐ์ ํ POSIX ๋ฒ์ , ๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ด ์ป๋ GNU ๋ฒ์ ์ด๋ค.
#define _GNU_SOURCE /* feature_test_macros(7) ์ฐธ๊ณ */
#include <string.h>
GNU ๋ฒ์ ์์๋ ์ ๋ ์ธ์๋ฅผ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉฐ path
๋์ ์ฌ๋์๊ฐ ์์ ๋, ํนํ path
๊ฐ "/"์ผ ๋์๋ ๋น ๋ฌธ์์ด์ ๋ฐํํ๋ค. dirname()
์ GNU ๋ฒ์ ์ ์๋ค.
glibc์์๋ <libgen.h>
๋ฅผ ํฌํจํ๋ฉด POSIX ๋ฒ์ basename()
์ ์ป๊ณ ์๋๋ฉด GNU ๋ฒ์ ์ ์ป๋๋ค.
glibc ๊ตฌํ์์ ์ด ํจ์๋ค์ POSIX ๋ฒ์ ์ด path
์ธ์๋ฅผ ๋ณ๊ฒฝํ๋ฉฐ, "/usr/" ๊ฐ์ ์ ์ ๋ฌธ์์ด๋ก ํธ์ถ ์ ์ธ๊ทธ๋ฉํ
์ด์
ํดํธ๊ฐ ๋ฐ์ํ๋ค.
glibc 2.2.1 ์ ์์ dirname()
์ glibc ๋ฒ์ ์ด ๋์ '/' ๋ฌธ์๊ฐ ์๋ ๊ฒฝ๋ก๋ช
์ ์ฌ๋ฐ๋ก ์ฒ๋ฆฌํ์ง ๋ชปํ์ผ๋ฉฐ NULL ์ธ์๋ฅผ ์ฃผ๋ฉด ์ธ๊ทธ๋ฉํ
์ด์
ํดํธ๊ฐ ๋ฐ์ํ๋ค.
๋ค์ ์ฝ๋ ์กฐ๊ฐ์ basename()
๋ฐ dirname()
์ฌ์ฉ ๋ฐฉ์์ ๋ณด์ฌ ์ค๋ค.
char *dirc, *basec, *bname, *dname;
char *path = "/etc/passwd";
dirc = strdup(path);
basec = strdup(path);
dname = dirname(dirc);
bname = basename(basec);
printf("dirname=%s, basename=%s\n", dname, bname);
basename(1)
, dirname(1)
2019-03-06