なんで情報が少ないのかなぁ?

gccというかg++で普段プログラム書いている。今少しばかり困った問題があって、解を探しているのだけどなかなか見つからない。結構ありがちな問題なのに、ググってもなかなか方法が見つからない。問題とは

  • 引数で与えたとあるファイルへのPATHを展開したい
  • 引数に環境変数が含まれている場合は、コマンド実行時に環境変数はシェルにより展開されて渡る。環境変数でなく、ホームディレクトリを示す〜も適切に展開される
  • しかし、gnuタイプのオプション --hogehoge=value では

さて、getopt_log の動作は確認していないが、単純に argv[] の中身を見てみるとそんな事が分かる。自分のホームディレクトリにあるファイルへのアクセスは〜を使わずに$HOMEを使えば言い訳なんだが、他のユーザーのホームディレクトリ以下のものを参照したい場合はそういう訳にはいかない。

ホームディレクトリ名前解決自身はそんなに難しいわけではなく、与えられたパスの先頭が〜であり、その次の文字がスラッシュでなければ$HOMEで、そうでなければ/home/で置き換えて上げれば普通は良いはず。もしかしたら必ずしもホームディレクトリが/homeにないかもしれないので、シェルに伺いを立てればいい。であとは置き換えるなりなんなりする。もともとプラットフォームとしてC++を採用しているので、文字列は基本的にstd::stringを使う事にしているから、そこらへんの置き換えは比較的単純。

な、訳なんだが。これをやるのが面倒。こんな事システムコールというと結構言い過ぎかもしれないけど、ライブラリに専用の関数があったっておかしくないと思うわけ。どうなんだろう。ないのかな?