UNIX/Linuxの部屋 関数:getcwd

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




関数 getcwd カレントディレクトリを取得する このエントリーをはてなブックマークに追加

#include <unistd.h>
#include <sys/param.h>
char buf[MAXPATHLEN];
getcwd(buf,sizeof(buf));
printf("カレントディレクトリ=%s\n",buf);

カレントディレクトリを取得するのは実は結構難しい。

まずルートディレクトリ `/' の i-node を取得する (root-ino)。そして現在のカレントディレクトリ `.' の i-node を取得し (cur-ino)、`/' の i-node と比較する。一致しなければ、一つ上のディレクトリ `..' に移動し、opendir を使ってそのディレクトリの下のファイル・ディレクトリ一覧を取得する。そして一つずつ i-node を調べ、cur-ino と比較する。そこで一致するとやっと最下部のディレクトリ名がわかる。そして `..' と root-ino を比較し…と延々繰り返し、root-ino と cur-ino が一致するまで繰り返すのである。

カレントディレクトリを変更するには、システムコール chdir を使えばよい。