実行ファイル
読み:じっこうファイル
外語:executable file
実行可能なプログラムとして扱われるファイルのこと。
オペレーティングシステム(OS)上でこのファイルを指定すると、そのプログラムが実行されるようになっている。
特徴
古典的なOS
DOS系
CP/Mやその後継のOSでは、ファイルの拡張子により、そのファイルが実行形式であるかどうかを判断する。
主な実行ファイルの拡張子は、次の通り。
COMとEXEの違い
CP/M、MSX-DOS、古いMS-DOSにおけるCOM形式は、ファイルの先頭からいきなりプログラムのバイナリコードとなっている。
これがそのまま、オフセット0100Hからメモリーにロードされ、その先頭より実行される。
極めて単純だが、CP/Mの時代はこれでも困らなかった。しかし、COMには拡張性がないため、MS-DOSでは新たにEXEフォーマットが作られた。
EXEフォーマットはファイルの先頭部分にヘッダーがあり、OSはヘッダーの部分を解釈して適切な処理を行なう。MS-DOSからWindowsになっても拡張子がEXEから変わらなかったのは、このヘッダー部分を利用してMS-DOS用の動作とWindows用の動作の二つの機能を一つのEXEファイルに持たせることができるためである。
なお、MS-DOSやWindowsは常に実行ファイルのヘッダーを確認するため、拡張子のCOMとEXEは同義である。例えばMS-DOSの頃のシェルはCOMMAND.COMだが、Windows 95以降のそれはEXE形式でありながら名前だけ「COMMAND.COM」となっている。
UNIX
パーミッション
UNIXにおいては、パーミッションに実行可能が付加されているファイルが実行ファイルとして扱われる。そのファイルの持ち主、グループ、他人のそれぞれで、個別に設定が可能。
但し、そのファイルはOSがプログラムとして解釈できるような内容になっていないと、当然動作しない。
つまり、ファイル名は無関係である。なお、UNIXにおいては「拡張子」というものは無い。
バイナリ
スクリプト形式
UNIXでは、1行目に特殊な記述をすることでシェルスクリプトやPerlなどのスクリプトを実行ファイルとして用いることができる。
例えば、シェルスクリプトの実際の例は、次の通り。
#!/bin/sh
print "hello, world"
これを「hello」というファイル名で保存し、パーミッションを実行可能とする。このファイルをOSから実行させると、OSは以下のような動作を行なう。
- ファイルの1行目を読み取る
- 1行目に記述されている内容から#!を除去したもの(この例では/bin/sh)を取得する
- 取得した文字列(/bin/sh)に実行ファイル自身のファイル名を繋げて「/bin/sh ./hello」というコマンドを作成し、それを実行する。これによりシェルスクリプトが解釈される。
- 当のシェルスクリプト1行目の#!/bin/shは、#がコメントを表わす記号であるため、無視されて2行目以降の内容が実行される。
シェルスクリプトやPerlにおいてコメントを表わす記号が#であるのは、このシェルスクリプトの動作機構と合わせるためである。
再検索