getcwd - ライブラリコールの説明 - Linux コマンド集 一覧表
名前
getcwd, get_current_dir_name, getwd - カレントワーキングディレクトリ名の取得
書式
#include <unistd.h>
char *getcwd(char *buf, size_t size);"char *get_current_dir_name(void);"char *getwd(char *buf);
説明
getcwd ()関数はカレントワーキングディレクトリの絶対パス名 (absolute pathname) を buf で示された size 長の配列にコピーする。
カレント絶対パス名 (current absolute pathname) が size よりも長い場合は、返り値として NULL が返り errno に ERANGE がセットされる。 アプリケーションはこのエラーをチェックし、 必要に応じてより長いバッファを用意すべきである。
buf が NULL の場合、 getcwd ()の動作は未定義である。 POSIX.1-2001 標準の拡張として、 Linux (libc4, libc5, glibc) では呼びだし時に buf に NULL を指定することで getcwd ()が必要なバッファを malloc ()を用いて動的に獲得するようにできる。 この場合、 size が 0 の場合を除き、バッファの長さは size となる。 size が 0 の場合には必要な大きさが確保される。 この方法で獲得したバッファは free ()で解放することが可能である(し、そうするのが賢明だ)。
_GNU_SOURCE が define されていれば、 get_current_dir_name ()関数がプロトタイプ宣言される。この関数はカレントディレクトリ名 を収めるのに十分な大きさの配列を malloc (3) で獲得する。環境変数 PWD が設定されておりその値が正しければ、その値が返される。
_BSD_SOURCE または _XOPEN_SOURCE_EXTENDED がdefineされていれば getwd ()関数がプロトタイプ宣言される。 この関数は malloc (3) によるメモリ獲得を一切行なわない。 buf 引数は少なくとも PATH_MAX バイトの長さを持つ配列へのポインタである必要がある。 getwd ()は実際のパス名の先頭 PATH_MAX バイトを返す。 PATH_MAX はコンパイル時の定数である必要はないことに注意すること。 これはファイルシステムに依存し、無制限である可能性すらある。 移植性とセキュリティ上の理由から、 getwd ()の利用は推奨されない。
返り値
エラーが発生すると NULL を返し、 errno がエラーに従ってセットされる。 成功すれば buf を返す。 エラーの場合は buf が指す配列の内容は未定義である。
エラー
- EACCES
- ファイル名の構成要素に対する読み込みあるいは検索の権限がない。
- EFAULT
- buf が不正なアドレスを指している。
- EINVAL
- size 引数が 0 かつ、 buf 引数が NULL ポインタでない。
- ENOENT
- カレントワーキングディレクトリが削除されている。
- ERANGE
- size 引数の値がワーキングディレクトリ名の長さより小さい。 より大きい配列を確保してもう一度実行する必要がある。
注意
Linux では (2.1.92 以降)、 getcwd ()はシステムコールである。 古いシステムでは /proc/self/cwd を参照する。 システムコールも proc ファイルシステムもない場合、 一般的な実装が呼び出される。 この場合においてのみ、(Linux では) この関数は EACCES で失敗する可能性がある。
これらの関数はしばしばカレントワーキングディレクトリの位置を保存し、 後で戻ってくるために利用される。 十分なファイルディスクリプタがある場合は、 現在のディレクトリ (".") を開いて fchdir (2)を呼び出すほうが普通は高速で信頼性がある。 特に Linux 以外のプラットフォームの場合はそうである。
準拠
POSIX.1-2001.