GETCWD(3)

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

ライブラリ
libc

書式
<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 引数が 0 です。

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

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

[ERANGE]
    size 引数が、0 よりも大きいですが、パス名 + 1 よりも小さいです。

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

規格
getcwd() 関数は、 p1003.1-90 に適合しています。 NULL ポインタを指定して、必要に応じて getcwd() にメモリを割り振らせる機能は拡張部分です。

歴史
getwd() 関数は、 4.0BSD ではじめて登場しました。

バグ
getwd() 関数はエラーチェックを十分に行っていません。 また非常に長いパス名は、有効でも返すことができません。 この関数は、互換性のために提供されています。