4

タスク:
独自のファイル拡張子を作成して、特定の「ドット」ファイルをクリックすると、プログラムがそのファイルを開くようにしたいと考えています。ただし、私が書いたこのプログラムは、何らかの処理を行いますが、最終的にはそのファイルを別のプログラムに渡して処理するという点で、仲介者にすぎません。

例:
したがって、たとえば、拡張子.fooを持つすべてのプレーン テキスト ファイルは、 gedit. しかし、実際に起こっていることは、それらが私のプログラムの 1 つで開かれており、私のプログラムがそのファイルを に渡しているということですgedit

これを行うための私のC ++プログラムは次のようになります。

#include <string>
#include <cstdlib>

int main(int argc,  char** argv) {

    //open file with gedit
    system(("(gedit " + std::string(argv[1]) + " > /dev/null &)").c_str());

    //do other processing
    //...
}

ファイルをクリックして、オペレーティングシステムが特定のプログラムで開くように指示すると、そのファイル名がそのプログラムの2番目の引数として(インデックス1として、インデックス0がプログラムの名前)。はバックグラウンド プロセスとして実行され、ステートメントの周りの余分な&部分により、親シェルが閉じられたときに が閉じられないことが保証されます。gedit()gedit

問題:
以上のことから、このプログラムは、$PATH 変数にリストされているフォルダーにバイナリーがあり、ファイルがクリックされたかのようにファイルを渡すコマンドラインからプログラムを実行すると、正しく動作します。しかし、実際にプログラムでファイルを開くように設定するとうまくいきません。

ファイルクリックでプログラムを実行するように設定した方法:この質問の回答に
あるスクリプトを実行しましたが 、プログラムは表示され ますが、ファイルをクリックしても何も起こらないようです。プログラムを無限ループに入れて、プロセスとして実行されているかどうかを確認しましたが、そうではありませんでした。プログラムがまったく呼び出されないのはなぜですか? それとも、何らかの理由で呼び出されてすぐに閉じますか? そのスクリプトは、私が必要としていたことをすべて実行するわけではありませんか? 実行する必要がある追加の手順はありますか? プログラムを登録して、別の方法でファイル拡張子に関連付ける必要がありますか?
Right Click->Properties->Open With ここに画像の説明を入力

私はUbuntuを使用しています。

4

1 に答える 1

0

ターミナルを開いて環境を調査するだけかもしれません。

int main(int argc,  char** argv) {
    std::system("gnome-terminal");
}
于 2014-01-31T13:50:06.623 に答える