Provided by: manpages-ja-dev_0.5.0.0.20131015+dfsg-2_all
名前
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) が入った文字列を返す。 返される文字列は NULL で終端される。 パス名は関数の結果と して返され、引数 buf がある場合は buf 経由でも返される。 getcwd() 関数はカレントワーキングディレクトリの絶対パス名を buf で示された size 長の配列 にコピーする。 終端の NULL バイトも含めた、カレントワーキングディレクトリの 絶対パス名の長さが size バイ トを超えている場合は、返り値として NULL が返り errno に ERANGE がセットされる。 アプリケー ションはこのエラーをチェックし、 必要に応じてより長いバッファを用意すべきである。 POSIX.1-2001 標準の拡張として、 Linux (libc4, libc5, 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 バ イトの長さを持つ配列へのポインタである必要がある。 終端の NULL バイトも含めた、カレント ワーキングディレクトリの 絶対パス名の長さが PATH_MAX バイトを超えている場合、 NULL が返さ れ、 errno に ENAMETOOLONG が設定される。 (システムによっては、 PATH_MAX は必ずしもコンパ イル時に決まる定数ではない点に注意すること。 また、ファイルシステムに依存する場合もある。 pathconf(3) を参照。) 移植性とセキュリティ上の理由から、 getwd() の利用は推奨されない。
返り値
成功すると、これらの関数はカレントワーキングディレクトリの絶対パス名 が入った文字列へのポ インタを返す。 getcwd() と getwd() の場合、返り値は buf と同じ値になる。 失敗した場合、これらの関数は NULL を返し、 errno にエラーを示す値を設定する。 buf が指す配 列の内容は未定義である。
エラー
EACCES ファイル名の構成要素に対する読み込みあるいは検索の権限がない。 EFAULT buf が不正なアドレスを指している。 EINVAL size 引数が 0 かつ、 buf 引数が NULL ポインタでない。 EINVAL getwd(): buf が NULL である。 ENAMETOOLONG getwd(): 絶対パス名が入った NULL 終端された文字列の長さが 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.54 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。