パスの考え方(PATH)
パス、パスを通す
この部屋はしつこいページです。パスという言葉はなかなかに手ごわいです。このしつこさはわたくしの経験上いかに馴染みづらかったかをつくづく示しています。
「実行パス(を通す)」の話は前ページ の説明ですみましたが、ここでの、「パスを通す」の「パス」は、実行パスに限らないことに注意してください。
※注目 : 「〜にパスを通す」 が分かりにくい場合は、「〜をなんとかパスとして有効にする」 と読み替えると遥かに分かりやすいです。 なんとかパス、の部分は、実行パスであったり、インクルードパスであったり、ライブラリパスであったりします。
パス、とディレクトリ (ファイルも) は、ほぼ同じような意味あいです。パスとはファイルやディレクトリを指定するための「表記」だと思えばいいと思います。
パス、は、ディレクトリ名をのこともあれば、ファイル名のこともあります。
「C:\WINDOWS」 はディレクトリパス、「C:\WINDOWS\notepad.exe」 はファイルパス、といった具合です。主にディレクトリとファイルのいずれかです。( ドライブ名はディレクトリ名に準じるし、デバイス名もファイル名のうちに入ります。)
cd C:\WINDOWS |
この動作で、ディレクトリ C:\〜 に移動するとはいいますが、パス C:\〜 に移動するとは言いません( あるいは言いにくい表現です)。
パス C:\〜 を指定した、とは言います。( ディレクトリ C:\〜 を指定したとも言えますが。)「パス」の述語は「指定する(specify)」が一番似合います。
パスとディレクトリの違いはなにか。これはおそらくですが、言葉の使い方からの推察です。ディレクトリは、ファイル管理構造の中で、ある位置に広がるスペースそのもののようなものを意味していて、パスはその位置を指定、特定するためのもの(手段であって、表記、また、文字列)を意味するというふうに区別されるのでしょう。だから、@パスを指定してAディレクトリに移動したり、@パスを指定してAファイルを実行したりする。これは単なる解説っぽくておもしろくない。じゃぁもう少し考えてみよう。 path とはもともと 小道とかいう意味です。それが コンピュータ用語に転用(言ってみれば隠喩)されているわけです。辞書を見たって載ってない。そこが分かりにくいもとなんです。通常のプログラミングだったらもったいぶってパスなんて言わなくても、ディレクトリ名、ファイル名といっていれば事足りることをわたくしは知っています。そこで考えるのです。この言葉は、OS 開発者の言葉なんです。フロッピーとかハードディスクの中の位置を示すときは、ディレクトリだろうがファイルだろうがどっちでもよく(物理的な位置を示す、まったくおんなじものだから)、いちいちディレクトリ名とかファイル名とかいっていたのではかえって会話しづらいから path ってことにしたんでしょう。うなるほど多くの C:\WINDOWS やら、C:\My Document やらが開発作業中に出てくる中で、それらはディレクトリでもファイルでもどっちでもいいのに、言葉を選択する分だけ費やすエネルギーが無駄なのです。 |
そんな理屈は抜きにします。パスは、MS-DOS コマンドでも使用しますが、プログラミングでもパスは頻繁に使われます。パラメータにファイル名を指定する(とりも直さずパスを指定する)ような関数が、まぁまぁ、あるからです。
関数 fopen() は、ファイルを読んだり書いたりする前に、ファイルへのアクセスを確定するための(C言語)関数で、こういうことは普通ファイルをオープンする(開く)、といいます。テキストエディタを利用する際などは、テキストファイルを編集部に展開し終えるまでをファイルのオープンと普通言うことと思いますが、このオープンはプログラムレベルでは、 「ファイルから内容を読み込みの処理、その他」 も含んでいるので多少感覚が違います。コンピュータと接しているとそういう類の違いはこれからもいくつかあるので、大目に見ておいてください。
このかんすうは、FILE *fp = fopen( "
C:\My Project\binary.bin" ,"wb") ;のように使います。
赤字の部分がファイル名でありパスでもあり、この関数に対してパスを指定していると言うことが出来ます。(※)
例は一つきりですが、関数の説明の記述などでは、ファイル名やディレクトリ名、といった言葉を使わずに、パス(path)、という言葉を使っていることが非常に多い(意味は同じなのですが)ので、この言葉を知っておいて欲しいということです。
パスにまつわる言葉を挙げれば、相対パス、絶対パス(フルパス)、実行パス、ディレクトリパス、ファイルパス、そのほか、インクルードパス、ライブラリパス、などがあります。(参照パス、検索パス)
また、実行パス、インクルードパス、ライブラリパスには、「〜を通す」、「〜が通っている」、などの述語が用いられます。(ただしこれら3つは同列のものではありません)
更に、パスを通す、とは、上のいずれであっても、ファイルを指定する場合(←この場合にもいろいろありますが)、「フルパスを指定しなくても、ディレクトリをあらかじめ指定しておいて、そのディレクトリ内であればファイル名(相対の、ファイルパス)だけで指定できる(わかる or 認識できる)ようにする」ということで、たいていは作業をする人の簡便のためです。具体的な作業は「ディレクトリをあらかじめ指定」することであり、それは設定ファイルにパスを設定したり、コマンド実行時に指定したり、という作業、操作にあたります。設定ファイルはまた、個別具体的なファイルです。実行パスの場合 : (WINDOWS では)ルートディレクトリの autoexec.bat 、インクルードパス : bcc32.cfg(例)、ライブラリパス : bcc32.cfg やilink32.cfg (ともに例)。
上のことを具体的に説明しましょう
その実行パス内の実行ファイル(.exe) にはどこからでもアクセス(実行)できる。したがって、"C:\borland\bcc55\bin"パス を パスに加えれ(←ややこしいが正しい)ば、そこにある bcc32.exe はどこからでも実行できる。(コンソール上どのディレクトリでもコンパイルができるようになる) |
パスを通さなければ、ソースプログラム中、 #include "C:\borland\bcc55\include\stdio.h" としなければならないところ、 #include <stdio.h> で済ますことができる。 |
(
ilink32.cfg に記述を加えて)ライブラリパスを通さないと・・・・・
ソースプログラム中で、 #pragma comment( lib , "C:\borland\bcc55\lib\library_name.lib" ) の記述(#pragma 指令 : directive)を、使用するすべてのライブラリファイル(.lib) に対してやらなくてはならない! |
※ 尚、プログラム内での「関数のパラメータ」としてのパスの記述を簡便化する方法としてのパスを通す、というものは普通ありません。関数が特に指定していなければパス指定はすべてフルパスです。ドライブ名も含めてきちんと指定します。
※ 私はパスでは散々苦い思いをしました。パスを通す?パス?通す?さらに、〜にパスを通す?この「に」ってなんなんだ、といった調子です。
○ パス(PATH) は環境変数の一つですが、(Get)SetEnvironmentVariable() 関数により "Programatically" に 環境変数( パス を含めて) を指定することができます。(プロセス毎(ごと)の設定)。
戻る