Man page - basename(3)

Packages contains this manual

Available languages:

en fr es pl ja ru ro zh_TW zh_CN

Manual

BASENAME

名 前
書 式
説 明
返 り 値
属 性
準 拠
注 意
バ グ
例
関 連 項 目
こ の 文 書 に つ い て

名 前

basename, dirname - パ ス 名 を 解 析 し て 各 部 分 を 取 り 出 す

書 式

#include <libgen.h>

char *dirname(char * path );

char *basename(char * path );

説 明

警 告 : basename () に は 異 な る バ ー ジ ョ ン が 2つ 存 在 す る 。 下 記 の 「 注 意 」 の 節 を 参 照 の こ と 。

dirname () と basename () は 、 ヌ ル で 終 端 さ れ た パ ス 名 の 文 字 列 を 、 デ ィ レ ク ト リ 部 分 ・ フ ァ イ ル 名 部 分 に 分 割 す る 。 通 常 は 、 dirname () は 最 後 の '/' ま で の 部 分 (最 後 の '/' は 含 ま な い ) を 返 し 、 basename () は 最 後 の '/' 以 降 の 部 分 を 返 す 。 文 字 列 の 末 尾 に つ い た '/' 文 字 は 、 パ ス 名 の 一 部 と は み な さ れ な い 。

path に ’/’ 文 字 が な い 場 合 は 、 dirname () は 文 字 列 "." を 返 し 、 basename () は path と 同 じ 内 容 を 返 す 。 path が 文 字 列 "/" に 等 し い 場 合 は 、 dirname () も basename () も 文 字 列 "/" を 返 す 。 path が ヌ ル ポ イ ン タ ー だ っ た り 、 空 の 文 字 列 を 指 し て い た 場 合 は 、 dirname () も basename () も 文 字 列 "." を 返 す 。

dirname () の 返 し た 文 字 列 、 "/"、 basename () の 返 し た 文 字 列 、 を 順 に 結 合 す る と 、 完 全 な パ ス 名 が 得 ら れ る 。

dirname () と basename () は 、 い ず れ も path の 内 容 を 変 更 す る こ と が あ る 。 し た が っ て 、 こ れ ら の 関 数 を 呼 び 出 す 際 に は コ ピ ー を 渡 す の が 望 ま し い 。

こ れ ら の 関 数 は 、 静 的 に 割 り 当 て ら れ た メ モ リ ー へ の ポ イ ン タ ー を 返 す こ と が あ り 、 こ れ ら の 領 域 は 後 の 関 数 呼 び 出 し で 上 書 き さ れ る か も し れ な い 。 ま た 、 こ れ ら の 関 数 は path の 一 部 分 を 指 す ポ イ ン タ ー を 返 す こ と も あ る 。 そ の た め 、 path で 参 照 さ れ る 文 字 列 は 、 関 数 が 返 す ポ イ ン タ ー が 不 要 に な る ま で は 変 更 し た り free し た り す べ き で は な い 。

以 下 の 一 連 の 例 (SUSv2 か ら 引 用 ) は 、 い ろ い ろ な path に 対 し て dirname () と basename () が 返 す 文 字 列 を 表 し た も の で あ る 。

Image grohtml-27071-1.png

返 り 値

dirname () と basename () は 、 い ず れ も ヌ ル で 終 端 さ れ た 文 字 列 へ の ポ イ ン タ ー を 返 す 。 (こ れ ら の ポ イ ン タ ー を free (3) に 渡 さ な い こ と 。 )

属 性

こ の 節 で 使 用 さ れ て い る 用 語 の 説 明 に つ い て は 、 attributes (7) を 参 照 。

Image grohtml-27071-2.png

準 拠

POSIX.1-2001, POSIX.1-2008.

注 意

basename () に は 2種 類 の 異 な る バ ー ジ ョ ン が あ る 。 一 つ は す で に 説 明 し た POSIX バ ー ジ ョ ン で あ り 、 も う 一 つ は GNU バ ー ジ ョ ン で あ る 。 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/" な ど の 静 的 文 字 列 を 指 定 さ れ る と セ グ メ ン テ ー シ ョ ン フ ォ ー ル ト を 起 こ す 。

バ ー ジ ョ ン 2.2.1 以 前 の glibc で は 、 glibc の dirname () は 末 尾 が '/' 文 字 に な っ て い る パ ス 名 を 正 し く 扱 え ず 、 引 数 が NULL だ と セ グ メ ン テ ー シ ョ ン フ ォ ー ル ト を 起 こ し た 。

例

The following code snippet demonstrates the use of basename () and 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)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。