A,Bというディレクトリ名をもつ複数個のディレクトリが図の構造で管理されている。
カレントディレクトリを¥A¥B → .. → ..¥B → .¥Aの順に移動させた場合,最終的なカレントディレクトリはどこか。
ここで,ディレクトリの指定方法は次のとおりとする。
〔ディレクトリの指定方法〕
(1) ディレクトリは,“ディレクトリ名¥…¥ディレクトリ名”のように,経路上のディレクトリを順に“¥”で区切って並べた後に“¥”とディレクトリ名を指定する。
(2) カレントディレクトリは“.”で表す。
(3) 1階層上のディレクトリは“..”で表す。
(4) 始まりが“¥”のときは,左端にルートディレクトリが省略されているものとする。
(5) 始まりが“¥”,“.”,“..”のいずれでもないときは,左端にカレントディレクトリ配下であることを表す“.¥”が省略されているものとする。
正答4
解説
正解は4です。
相対パスと絶対パスの指定に従って、カレントディレクトリの移動をたどる問題です。
図の木構造は、ルートの下にAとBがあります。
ルート直下のAの下にはAとBがあり、そのAの下にA、そのBの下にAとBがあります。
ルート直下のBの下にはAとBがあります。
【移動の追跡】
最初の「¥A¥B」は先頭が¥なので、ルートからの指定です。
カレントディレクトリは、ルート直下のAの下のB(¥A¥B)になります。
次の「..」は1階層上なので、¥Aに移ります。
次の「..¥B」は、1階層上のルートに上がってから、その下のBに移る指定です。
カレントディレクトリは¥Bになります。
最後の「.¥A」は、カレントディレクトリ¥Bの下のAを指します。
最終的なカレントディレクトリは¥B¥Aで、図にも存在します。
【選択肢別解説】
1:× ¥Aは2番目の移動(..)のあとの位置です。
その後さらに2回移動するので、最終位置ではありません。
2:× ¥A¥Aは、3番目の「..¥B」を飛ばして、¥Aから「.¥A」に進んだ場合の位置です。
実際には「..¥B」でルート直下のBに移ってから「.¥A」を行うので、¥A¥Aにはなりません。
3:× ¥A¥B¥Aは、最初の¥A¥Bからそのまま下のAに移った場合の位置です。
途中の「..」や「..¥B」による移動を無視しているので誤りです。
4:○ ¥A¥B、¥A、¥B、¥B¥Aの順に移動し、最終的に¥B¥Aになります。
【ポイント】
「..」は1階層上、「.」は現在の位置を表します。
先頭が¥なら絶対パス、それ以外は相対パスとして、1回ずつ現在位置を書き出すと迷いません。