.pdfブラウザがインストールされているC ++プログラムを調べたいと思います。popenを使用する予定でしたが、このコードでもnun-NULLが返されます。
FILE *fp;
fp = popen("abracadabraxx ", "r");
アプリケーションがインストールされていないとフォークできないと思っていました。私は何かを誤解しましたか?
アプリケーションがインストールされていないとフォークできないと思っていました
ドキュメントごとに、popen
(使用してシェルを起動/bin/sh -c
POSIXシステム上)、および戻りますシェル出力に接続されたファイルディスクリプタ(または入力、二番目のパラメータに依存します)。コマンドの有効性は、の成功とは無関係であるpopen
ので、あなたが取得するつもりされていない、「それ自体」NULL
のファイル記述子を作成するには、そのようなフォークに不可能などの低レベルの障害のために期待されるべき(出力中かにexec
シェル自体、リソースが少ない状況でない限り「発生してはならない」すべてのもの)。
シェルが標準出力で吐き出すメッセージを受け取るだけです(標準エラーであるため、おそらく何も表示されません)。ちなみに、これはpopen
、何が悪かったのかについて適切な診断が必要な場合に、一般的に良い考えではない理由の1つです。
あなたが何をすることができません、しかし、のリターンコードを検査することであるpclose
あなたに提供します、シェルあなたは(もしあれば)何が悪かったのかについてのいくつかの詳細を見つけるために使用することが、終了コードを。
そうは言っても、ユーザーの好みに応じてファイルを「起動」することは、通常、オペレーティングシステムまたはOSが提供するユーティリティに委任するのが最適です。これを行う簡単な方法は、ShellExecute
WindowsのAPI open
、macOSのxdg-open
ユーティリティ、およびほとんどのLinuxインストールのユーティリティです1。
実行可能ファイルを使用してファイルを開始することに関しては、はるかに複雑な問題です。macOSについてはわかりませんが、Windowsでは、ファイルは「プレーンな」実行可能ファイルよりも複雑なものに関連付けられている可能性があります(おそらくコマンドラインを使用)-以前はDDEコマンドがあり、自動インストールされるいくつかの新しい派手なMSI嫌悪感がありましたオンデマンドのものやその他の「魔法の」シェルのもの。Linuxでも、アプリケーションのDBusアクティベーションなどのサポートが壊れているのではないかと思います。したがって、一般に「関連付けられた実行可能ファイル」のようなものはありません。システムにファイルを開いて、この種の問題を回避するように依頼するだけです。
xdg-open
一般的には安全な賭けです(私も失敗するのを見ましたが)。このようなことを自分でやろうとするFirefoxの道をたどらないでください。そうしないと、間違ったアプリケーションで10年前のバグが発生し、定期的に再表示されます。この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加