3

実行可能ファイルにオプションを渡すにはどうすればよいですか? オプションのブール引数を作成するよりも簡単な方法はありますか?

編集:最後の2つの回答は、引数の使用を提案しています。そのような実行可能なソリューションをコーディングできることはわかっていますが、それらをオプションにしたいと思います。

EDIT2: 明確化の要求ごとに、この単純な例を使用します: 引数は自動的に配列に解析されるため、引数を処理するのはかなり簡単です。

./printfile file.txt 1000

ユーザーが印刷したいファイルの名前を知りたい場合は、argv[1] 経由でアクセスします。

さて、この状況について:

./printfile file.txt 1000 --nolinebreaks

ユーザーは改行なしでファイルを印刷したいと考えています。これは、プログラムを実行できるようにするために必要ではありません (ファイル名と印刷する行数のように) が、ユーザーは必要に応じて if を使用するオプションがあります。今、私はこれを使用してこれを行うことができます:

./printfile file.txt 1000 true

使用プロンプトは、ファイルを改行付きで印刷するかどうかを決定するために 3 番目の引数が使用されることをユーザーに通知します。しかし、これはかなり不器用に思えます。

4

8 に答える 8

11

コマンドライン引数は、行く方法です。このタスクを簡素化するために、Boost.ProgramOptions の使用を検討することをお勧めします。

于 2008-09-24T02:51:04.853 に答える
4

--「」で始まる「オプション」とそうでない「引数」には根本的な違いがあるとお考えのようですね。唯一の違いは、それらを解析する方法です。

getopt()GNU の/getopt_long()オプション パーサーを調べてみる価値があるかもしれません。などのオプションを使用して引数を渡すことをサポートしています--number-of-line-breaks 47

于 2008-09-24T03:16:49.567 に答える
2

情報を渡すために 2 つの方法を使用します。

1/ コマンド ライン引数の使用。getargs などの特定のライブラリで処理が容易になります。

2/ 環境変数として、getenv を使用します。

于 2008-09-24T02:50:18.553 に答える
1

パックスはここで正しい考えを持っています。

より完全な双方向通信が必要な場合は、パイプを使用してプロセスを開き、stdin に送信して stdout をリッスンします。

于 2008-09-24T03:02:36.137 に答える
1

Window の PostMessage() 関数を使用することもできます。これは、オプションを送信したい実行可能ファイルが既に実行されている場合に非常に便利です。この手法に興味がある場合は、サンプル コードを投稿できます。

于 2008-09-24T03:08:31.537 に答える
0

poptライブラリが好きです。これはCですが、C++からも正常に動作します。

ただし、クロスプラットフォームではないようです。一部のLinuxソフトウェアのWindowsポート用に、自分のAPI互換バージョンをハックアウトする必要があることがわかりました。

于 2008-09-24T04:13:03.457 に答える
0

質問は、コンテキストと何をしようとしているのかについて非常に明確ではありません.C++プログラム内から実行可能ファイルを実行することを意味しますか? execl()、execv()、execve() などの名前を持ついくつかの標準 C ライブラリ関数があり、オプションを文字列または文字列の配列へのポインターとして受け取ります。また、bash プロンプトで入力する内容、オプションなどを含む文字列を受け取る system() もあります。

于 2008-09-24T02:55:52.113 に答える
-1

オプションを .ini ファイルに入れ、GetPrivateProfileXXX APIを使用して、探しているプログラム オプションのタイプを .ini から読み取ることができるクラスを作成できます。

アプリのインタラクティブ シェルを作成して、特定の設定をリアルタイムで変更することもできます。

編集:編集から、各オプションを解析して、そのオプションに関連付けられた「オプション」の特別なキーワードを探すことはできませんか?

于 2008-09-24T03:03:23.437 に答える