hirax.net::Keywords::「相対パス」のブログ



2003-01-21[n年前へ]

PowerPoint2000 on Windows XPのナゾ 

 おエライさんへのプレゼンをしなけりゃイケナイというので、MPEG動画を埋め込んだPowerPointのファイルを作った。ところが、Windows XP上のPowerPoint2000では何故かPowerPoint上でMPEG動画ファイルが軒並み再生できないのである。MPEGのCODECもインストールしてあって、メディアプレーヤーでも再生できるのだけれど、PowerPoint上ではMPEG動画ファイルが再生できないのだ。他にも、動画を張り込んだときにファイルの場所を(動画ファイルは埋め込まれないらしいから)相対パスで埋め込むにはどうしたら良いのか、とか小さなナゾばかりなのである。
 この手の動画埋め込みまくりのデータを本人所有以外のPCで動かすのには結構準備作業が多い、という辺りを理解していない人が多いのも困りものだったり、身だしなみチェックとか失礼になるから差し棒使っちゃダメよとか△○とか色々あるわけなのだけれど、気楽にボチボチとやるのである。

2004-03-13[n年前へ]

今日の疑問 

 Linuxでg++でアプリケーションを作るときに、起動されたアプリケーションが「そのアプリケーションが置いてある場所」を知るにはどんな関数を使えば良いものなのでしょう?ファイル出力などが必要ない(system()+whichを使ってパスをファイルに吐いて、というようなものでない)方法はどんなものなのでしょう?

一般的な方法はないと思います。Unixのファイルシステムでは、バイナリはハードリンクで複数のパスを持てますし、ファイル実体からそのファイルのパスを参照する方法はありません。(極端な話、アプリケーション起動後にそのバイナリファイルをunlinkしてしまえば、「パスを持たないけれど走っているアプリケーション」になります---「このプログラムは実行終了後自動的に消滅する」ってわけです)。Unix上で、お望みの動作を得るのによく見る方法は、 * argv0を見て、それが絶対パスならそれを採用 * argv0を見て、それが相対パスならgetcwd()して絶対パスに直す * そうでなければ、PATH環境変数をひとつづつ探すというものです。上記の手順はよく使われるので、ライブラリもいくつか存在すると思います。例えばglib (www.gtk.org) の g_find_program_in_path()等は使えると思います。
 ありがとうございます。川合さん



■Powered by yagm.net