Windows だと GetModuleFileName で現在実行中のファイルのファイル名が取得できる。
Linux だと、おそらく
char* self = getenv("_");
で取得可能。
ただし、手元の環境(Ubuntu 10.04)では "_" で取得できたが、全ての環境でこれが使用できるかは定かではない。
2011/08/12 追記
例えば以下のような hoge.sh シェルがあった場合:
./fuga
hoge 内で getenv("_") すると、"./hoge.sh" が文字列として取得されてしまい、GetModuleFileName のようにモジュールのファイル名が取得できるとは限らない。