#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) 参照):
getcwd():
_BSD_SOURCE || _XOPEN_SOURCE >= 500
get_current_dir_name():
_GNU_SOURCE
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() の利用は推奨されない。
失敗した場合、これらの関数は NULL を返し、 errno にエラーを示す値を設定する。 buf が指す配列の内容は未定義である。
getwd() は POSIX.1-2001 に存在しているが、「過去の名残(LEGACY)」とされている。 POSIX.1-2008 では、 getwd() の仕様が削除されている。 代わりに getcwd() を使うこと。 POSIX.1-2001 は getwd() に関するエラーを定義していない。
get_current_dir_name() は GNU 拡張である。
これらの関数はしばしばカレントワーキングディレクトリの位置を保存し、 後で戻ってくるために利用される。 未使用のファイルディスクリプタが十分ある場合は、 現在のディレクトリ (".") を開いて fchdir(2) を呼び出すほうが普通は高速で信頼性がある。 特に Linux 以外のプラットフォームの場合はそうである。