拡張子の扱い

Windows ユーザーなら, 拡張子という概念は馴染み深いものであるし,
Macintosh や Unix 使いにとっても,
インターネットを体験したことがあるならば一度は見たことがあるだろう.
拡張子とはファイル名の末尾にある . 以降
(. を含めるかどうかは文脈による) の文字列のことである.

拡張子はファイルの種類を示すための目印として用いられる.
ただし, あくまでも目印であるから, 拡張子が .jpg である HTML
ファイルを作ることも,
拡張子が .txt である ZIP 書庫ファイルを作ることも,
本来は問題がないことである.
また, 拡張子を使わないという選択肢もある
(例えば, bakera.jp).
しかし, 実際の運営上は標準的な拡張子を付加していくことになるのだろう.
殆どの Windows アプリケーションや Apache をはじめとする
Web サーバーは, 拡張子をファイルの種類の判断材料として用いているのが現状である.

さて, ここからがメモの本題.
いま, C 言語で CGI を作っているのだが,
実行ファイルが出力すべき文字列の中に,
実行ファイル名そのものを含める必要がでてきた.
実行ファイルに付加される拡張子はシステム (OS) によってまちまちである.
変数 argv[0] にプログラム名が格納されているが,
サーバー環境におけるフルパスになっている可能性が高い.
Apache のサーバーであれば, 環境変数 SCRIPT_NAME を使ってもいいのだが,
全ての Web サーバーがそのような仕様であるとは限らないので自前で取得するにはどうしたらよいのだろうか.
答は GNU autotools に含まれる autoconf を使うことである.
configure.ac に次の記載を加えると, 拡張子を判断できる.

AC_DEFINE_UNQUOTED(EXEEXT, "$ac_cv_exeext", [Extention of executable file])

拡張子を除いたファイル名は自分で定義するのでこれで移植可能なプログラムを作成できるだろう.

コメントを残す