名 前
getcwd, getwd, get_current_dir_name − カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ 名 の 取 得
書 式
#include <unistd.h>
char *getcwd(char *buf, size_t size);
char *getwd(char *buf);
char *get_current_dir_name(void);
glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):
get_current_dir_name():
_GNU_SOURCE
getwd():
glibc 2.12 以 降 :
_BSD_SOURCE ||
(_XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED)
&&
!(_POSIX_C_SOURCE >= 200809L ||
_XOPEN_SOURCE >= 700)
glibc 2.12 よ り
前 : _BSD_SOURCE || _XOPEN_SOURCE >= 500
||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
説 明
こ れ ら の 関 数 は 、 呼 び 出 し た プ ロ セ ス の カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ の 絶 対 パ ス 名 (absolute pathname) が 入 っ た 文 字 列 を 返 す 。 返 さ れ る 文 字 列 は ヌ ル で 終 端 さ れ る 。 パ ス 名 は 関 数 の 結 果 と し て 返 さ れ 、 引 数 buf が あ る 場 合 は buf 経 由 で も 返 さ れ る 。
getcwd() 関 数 は カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ の 絶 対 パ ス 名 を buf で 示 さ れ た size 長 の 配 列 に コ ピ ー す る 。 終 端 の ヌ ル バ イ ト も 含 め た 、 カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ の 絶 対 パ ス 名 の 長 さ が size バ イ ト を 超 え て い る 場 合 は 、 返 り 値 と し て NULL が 返 り errno に ERANGE が セ ッ ト さ れ る 。 ア プ リ ケ ー シ ョ ン は こ の エ ラ ー を チ ェ ッ ク し 、 必 要 に 応 じ て よ り 長 い バ ッ フ ァ ー を 用 意 す べ き で あ る 。
POSIX.1−2001 標 準 の 拡 張 と し て 、 glibc で は buf が NULL の 場 合 、 getcwd() は 必 要 な バ ッ フ ァ ー を malloc(3) を 用 い て 動 的 に 割 り 当 て る 。 こ の 場 合 、 size が 0 の 場 合 を 除 き 、 バ ッ フ ァ ー の 長 さ は size と な る 。 size が 0 の 場 合 に は 必 要 な 大 き さ が 確 保 さ れ る 。 呼 び 出 し 側 で 、 返 さ れ た バ ッ フ ァ ー を free(3) す べ き で あ る 。
get_current_dir_name() は カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ の 絶 対 パ ス 名 を 収 め る の に 十 分 な 大 き さ の 配 列 を malloc(3) で 獲 得 す る 。 環 境 変 数 PWD が 設 定 さ れ て お り そ の 値 が 正 し け れ ば 、 そ の 値 が 返 さ れ る 。 呼 び 出 し 側 で 、 返 さ れ た バ ッ フ ァ ー を free(3) す べ き で あ る 。
getwd() は malloc(3) に よ る メ モ リ ー 獲 得 を 一 切 行 な わ な い 。 buf 引 数 は 少 な く と も PATH_MAX バ イ ト の 長 さ を 持 つ 配 列 へ の ポ イ ン タ ー で あ る 必 要 が あ る 。 終 端 の ヌ ル バ イ ト も 含 め た 、 カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ の 絶 対 パ ス 名 の 長 さ が PATH_MAX バ イ ト を 超 え て い る 場 合 、 NULL が 返 さ れ 、 errno に ENAMETOOLONG が 設 定 さ れ る 。 (シ ス テ ム に よ っ て は 、 PATH_MAX は 必 ず し も コ ン パ イ ル 時 に 決 ま る 定 数 で は な い 点 に 注 意 す る こ と 。 ま た 、 フ ァ イ ル シ ス テ ム に 依 存 す る 場 合 も あ る 。 pathconf(3) を 参 照 。 ) 移 植 性 と セ キ ュ リ テ ィ 上 の 理 由 か ら 、 getwd() の 利 用 は 推 奨 さ れ な い 。
返 り 値
成 功 す る と 、 こ れ ら の 関 数 は カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ の 絶 対 パ ス 名 が 入 っ た 文 字 列 へ の ポ イ ン タ ー を 返 す 。 getcwd() と getwd() の 場 合 、 返 り 値 は buf と 同 じ 値 に な る 。 失 敗 し た 場 合 、 こ れ ら の 関 数 は NULL を 返 し 、 errno に エ ラ ー を 示 す 値 を 設 定 す る 。 buf が 指 す 配 列 の 内 容 は 未 定 義 で あ る 。
エ ラ ー
EACCES フ ァ イ ル 名 の 構 成 要 素 に 対 す る 読 み 込 み あ る い は 検 索 の 権 限 が な い 。 | |
EFAULT |
buf が 不 正 な ア ド レ ス を 指 し て い る 。
EINVAL |
size 引 数 が 0 か つ 、 buf 引 数 が ヌ ル ポ イ ン タ ー で な い 。 | ||
EINVAL |
getwd(): buf が NULL で あ る 。 |
ENAMETOOLONG
getwd(): 絶 対 パ ス 名 が 入 っ た ヌ ル 終 端 さ れ た 文 字 列 の 長 さ が PATH_MAX バ イ ト を 超 え て い る 。
ENOENT カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ が 削 除 さ れ て い る 。 |
||
ERANGE |
size 引 数 の 値 が ワ ー キ ン グ デ ィ レ ク ト リ の 絶 対 パ ス 名 の 長 さ よ り 小 さ い 。 長 さ に は 文 字 列 の 終 端 バ イ ト も 含 ま れ る 。 よ り 大 き い 配 列 を 確 保 し て も う 一 度 実 行 す る 必 要 が あ る 。
準 拠
getcwd() は POSIX.1−2001 に 準 拠 し て い る 。 POSIX.1−2001 は 、 buf が NULL の 場 合 の getcwd() の 動 作 を 規 定 し な い ま ま と し て い る 。
getwd() は POSIX.1−2001 に 存 在 し て い る が 、 「 過 去 の 名 残 (LEGACY)」 と さ れ て い る 。 POSIX.1−2008 で は 、 getwd() の 仕 様 が 削 除 さ れ て い る 。 代 わ り に getcwd() を 使 う こ と 。 POSIX.1−2001 は getwd() に 関 す る エ ラ ー を 定 義 し て い な い 。
get_current_dir_name() は GNU 拡 張 で あ る 。
注 意
Linux で は (2.1.92 以 降 )、 getcwd() は シ ス テ ム コ ー ル で あ る 。 古 い シ ス テ ム で は /proc/self/cwd を 参 照 す る 。 シ ス テ ム コ ー ル も proc フ ァ イ ル シ ス テ ム も な い 場 合 、 一 般 的 な 実 装 が 呼 び 出 さ れ る 。 こ の 場 合 に お い て の み 、 (Linux で は ) こ の 関 数 は EACCES で 失 敗 す る 可 能 性 が あ る 。 こ れ ら の 関 数 は し ば し ば カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ の 位 置 を 保 存 し 、 後 で 戻 っ て く る た め に 利 用 さ れ る 。 未 使 用 の フ ァ イ ル デ ィ ス ク リ プ タ ー が 十 分 あ る 場 合 は 、 現 在 の デ ィ レ ク ト リ (".") を 開 い て fchdir(2) を 呼 び 出 す ほ う が 普 通 は 高 速 で 信 頼 性 が あ る 。 特 に Linux 以 外 の プ ラ ッ ト フ ォ ー ム の 場 合 は そ う で あ る 。
関 連 項 目
chdir(2), fchdir(2), open(2), unlink(2), free(3), malloc(3)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。