ダブルクリックすると、ファイルブラウザが開くLINUX用のC ++イメージプロセッサが作成されました。 filename引数を使用してコマンドラインから実行すると、ファイルが開きます。私のプログラムを使用して、画像拡張子を持つファイルを開くようにシステムを設定しました。残念ながら、コマンドラインでファイル名を使用して起動したときと同じようにファイルを開くのではなく、私のプログラムはファイル名引数がプログラムに渡されていないかのように動作し、ファイルブラウザを開きます。
私の質問は、私のプログラムで開かれたイメージファイルをダブルクリックすると、オペレーティングシステムから自分のプログラムにファイル名パラメータをどのようにインポートしますか?この情報はどこにも見つかりません。ファイル名がargv [1]にあると仮定しましたが、そうではありません。このプログラムを実行するために端末は必要ありません。
私は最新バージョンのCENTOS / Linux 7でGnomeデスクトップを実行しています。動作するデスクトップアイコンを設定し、そのアイコンをクリックしてアプリケーションを実行します。問題は、イメージファイルをダブルクリックすると、その名前がアプリケーションに到達できなくなり、ブラウザが表示されることです。端末で実行すると、すべてのコマンドラインパラメータが正しく機能するため、これは不思議です。最大の質問は、「システムがダブルクリックしたファイルのファイル名をどこに保存しますか?」です。
ありがとうございます。
答え1
.desktop ファイルを台無しにしました。キーはExec
何を処理するかを知るために、またはいずれかが必要です。%f
%F
%u
%U
答え2
解決済み:アプリケーションは、コマンドファイルまたは他のプロセスのストリームを介してスクリプトイメージのロードと合成コマンドを受け入れることができます。これを達成するために、アプリケーションは、パラメータを処理する前に、意思決定ツリーの上部にあるpoll()システムコールを介してSTDINをポーリングします。 STDINが空でない場合は、アプリケーションのコマンドストリームが含まれているとします。これにより、オペレーティングシステムはアプリケーションをホストするための新しいシェルプロセスを作成します。 poll()システムコールをパラメータ処理決定ツリーの最後に移動すると、ソフトウェアは期待どおりに機能します。 poll() システムコールが STDIN が空であるかどうかをテストする最良の方法であるかどうかはわかりませんが、この目的では機能しているようです。結論:プログラミング設計エラー。このように漠然とした質問を投稿して申し訳ありません。