2016年10月12日水曜日

argv[0]

■argv[0]

C言語で、main関数の引数を設定することがあります。main関数に引数を設定すると、コマンドラインで起動したときに、オプションを渡すことができて、作れるソフトの幅が広がります。

引数の名前は何でも構わないのですが、慣例として「int main(int argc, char *argv[])」と定義することが多いです。

このとき、argv[0]に、自分自身の名前(実行ファイルの名前)が入ることに、不思議な感じを覚えませんでしたか? 私は「何に使うんだろう?」と疑問でした。

■昔話

(上記の疑問が解けたのは、その4,5年後くらいです)

その昔、Unixのディスク容量が小さく、DLL(ダイナミックリンクライブラリ)などが無かった頃、ls、mv、ln、cpなどのコマンドは、同じ実行ファイルでした。そして名前だけをリンク(ハードリンク)で変えていました。そして、起動時に、自分の名前を見て、自分の名前に応じた処理を実行していました。

これにより、多くのライブラリを共有できるので、全体としてのサイズが節約できるのです。


■この技術、使ってみました

ブログパーツとして、このブログの右横にも使われている、バスの時刻を表示する「bus.html」と「bus-gps.html」があります。このプログラムは、どちらもバスの発車時刻データを使用します。データをデータファイルとして外部読み込みむことで、共通化の問題が解決できそうです。しかし、ここでは、自分のファイル名で振る舞いを変える方法を選びました。

JavaScriptだと「window.location.href.split('/').pop();」で、自分自身のファイル名が取り出せます。

「bus.html」と「bus-gps.html」は、使用するデータが共通なだけでなく、プログラムの共通部分が多いというかほとんど同じなので、プログラムが1個になっているのは、管理がとても楽です。昔の技術(知識)が役に立ちました (^_^)。

0 件のコメント:

コメントを投稿