Man page - realpath(3)

Packages contains this manual

Available languages:

en fr es ja ru ro de

Manual

REALPATH

名 前
書 式
説 明
返 り 値
エ ラ ー
属 性
準 拠
注 意
GNU に よ る 拡 張
バ グ
関 連 項 目
こ の 文 書 に つ い て

名 前

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 と し て 与 え ら れ た ヌ ル 終 端 さ れ た 文 字 列 中 の す べ て の シ ン ボ リ ッ ク リ ン ク を 展 開 し 、 /./ , /../ に よ る 参 照 や 余 分 な '/' を 解 決 し て 、 正 規 化 さ れ た 絶 対 パ ス 名 を 生 成 す る 。 得 ら れ た 絶 対 パ ス 名 は 、 最 大 で PATH_MAX バ イ ト の ヌ ル 終 端 さ れ た 文 字 列 と し て 、 resolved_path に よ り 参 照 さ れ る バ ッ フ ァ ー に 格 納 さ れ る 。 結 果 と し て 返 る パ ス の 中 に は 、 シ ン ボ リ ッ ク リ ン ク や /./ , /../ と い っ た 要 素 は 含 ま れ な い 。

resolved_path に NULL が 指 定 さ れ る と 、 realpath () は malloc (3) を 使 っ て 解 決 し た パ ス 名 を 保 持 す る た め の バ ッ フ ァ ー を 最 大 で PATH_MAX バ イ ト ま で 割 り 当 て 、 こ の バ ッ フ ァ ー へ の ポ イ ン タ ー を 返 す 。 呼 び 出 し 元 は 、 free (3) を 使 っ て こ の バ ッ フ ァ ー を 解 放 す べ き で あ る 。

返 り 値

エ ラ ー が な か っ た 場 合 、 realpath () は resolved_path へ の ポ イ ン タ ー を 返 す 。

そ れ 以 外 の 場 合 は NULL が 返 り 、 配 列 resolved_path の 内 容 は 不 定 と な り 、 errno に エ ラ ー の 内 容 を 示 す 値 が セ ッ ト さ れ る 。

エ ラ ー

EACCES

パ ス の デ ィ レ ク ト リ 部 分 に 、 読 み 出 し 許 可 ま た は 検 索 許 可 が 与 え ら れ て い な い 。

EINVAL

path が NULL で あ る 。 (バ ー ジ ョ ン 2.3 よ り 前 の glibc で は 、 resolved_path が NULL の 場 合 に も こ の エ ラ ー が 返 さ れ る 。 )

EIO

フ ァ イ ル シ ス テ ム を 読 む と き に 、 I/Oエ ラ ー が 起 こ っ た 。

ELOOP

パ ス 名 の 変 換 に あ た り 、 解 決 す べ き シ ン ボ リ ッ ク リ ン ク の 数 が 多 過 ぎ た 。

ENAMETOOLONG

パ ス 名 の 一 要 素 の 文 字 数 が NAME_MAX を 越 え て い る 、 ま た は パ ス 名 全 体 の 文 字 数 が PATH_MAX を 越 え て い る 。

ENOENT

指 定 さ れ た フ ァ イ ル が 存 在 し な い 。

ENOMEM

メ モ リ 不 足 。

ENOTDIR

パ ス の デ ィ レ ク ト リ 要 素 が 、 デ ィ レ ク ト リ で な い 。

属 性

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

Image grohtml-16488-1.png

準 拠

4.4BSD, POSIX.1-2001.

POSIX.1-2001 で は resolved_path が NULL の 場 合 の 動 作 は 実 装 に 依 存 す る と し て い る 。 POSIX.1-2008 で は 、 こ の マ ニ ュ ア ル ペ ー ジ に 書 か れ て い る 動 作 が 規 定 さ れ て い る 。

注 意

4.4BSD と Solaris で は 、 パ ス 名 の 長 さ の 上 限 は ( <sys/param.h> の 中 に あ る ) MAXPATHLEN で あ る 。 SUSv2 で は PATH_MAX NAME_MAX が 規 定 さ れ て お り 、 こ れ ら は <limits.h> で 定 義 さ れ て い る か 、 pathconf (3) 関 数 か ら 得 ら れ る 。 以 下 の よ う な ソ ー ス コ ー ド に な っ て い る こ と が 多 い 。

#ifdef PATH_MAX
path_max = PATH_MAX;
#else
path_max = pathconf(path, _PC_PATH_MAX);
if (path_max <= 0)

path_max = 4096;

#endif

(バ グ の 章 も 参 照 の こ と 。 )

GNU に よ る 拡 張

呼 び 出 し が EACCES ENOENT で 失 敗 し resolved_path が NULL で な い 場 合 、 読 む こ と が で き な い 、 も し く は 存 在 し な い path の デ ィ レ ク ト リ 要 素 (prefix) が 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 を 返 す か も し れ な い か ら で あ る 。 resolved_path == NULL の 機 能 を 使 う と 、 こ の 設 計 上 の 問 題 を 回 避 す る こ と が で き る 。 こ の 機 能 は POSIX.1-2001 で は 標 準 化 さ れ て い な い が 、 POSIX.1-2008 で は 標 準 化 さ れ て い る 。

関 連 項 目

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

こ の 文 書 に つ い て

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