GETCWD(3)

名称
getcwd, getwd - 作業ディレクトリのパス名を取得

書式
#include <unistd.h> char * getcwd(char *buf, size_t size) char * getwd(char *buf)

解説
getcwd() 関数は、現在の作業ディレクトリの絶対パス名を buf で参照されるメモリにコピーし、 buf のポインタを返します。 size 引数は、 buf で参照される配列のバイト数によるサイズです。

buf が NULL の場合は、パス名を保存するのに必要なだけの空間が割り振られます。この空 間は後で free(3) できます。

関数 getwd() は getcwd() を呼び出す互換性ルーチンです。 buf 引数および、(インクルードファイル <sys/param.h> で定義された) MAXPATHLEN のサイズを持ちます。 buf が少なくとも、 MAXPATHLEN バイトの長さを持たなければならないことは明らかです。

これらのルーチンは従来、そこへ戻るために作業ディレクトリの名前を保存す るプログラムによって使用されてきました。これをより速く誤りなく遂行する ものとして、カレントディレクトリ (‘’). をオープンし、 fchdir(2) 関数を使って戻る方法があります。

戻り値
無事に完了した場合はパス名のポインタが返ります。その他の場合は NULL ポインタが返り、エラーを示すためグローバル変数 errno が設定され、さらに getwd() が errno に関連するエラーメッセージを buf で参照されるメモリにコピーします。

エラー
getcwd() 関数は次の場合に失敗します。

[EACCES]
    読み込みまたは検索パーミッションが、パス名の構成要素のため拒否されまし た。

[EINVAL]
    size 引数がゼロです。

[ENOENT]
    パス名の構成要素がもはや存在しません。

[ENOMEM]
    利用できるメモリが十分ではありません。

[ERANGE]
    size 引数はゼロよりも大きいが、パス名 + 1 よりも小さいので不当です。

関連項目
chdir(2), fchdir(2), malloc(3), strerror(3)

規格
getcwd() 関数は、 ansiC に準拠しています。 NULL ポインタを指定して、必要に応じて getcwd() にメモリを割り振る機能は拡張部分です。

歴史
getwd() 関数は 4.0BSD で最初に取り入れられました。

バグ
getwd() 関数はエラーチックを十分に行いません。非常に長いパス名は、有効でも返す ことができません。互換性を考える上で注意が必要です。