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/ に書かれている。