1

良い一日、

私は、ユーザーからの文字列を受け入れ、それらを検証し、入力に基づいて特定のアクションを実行できる単純なプロンプトを提供する単純なCLI(コマンドラインインターフェイス)アプリケーションを作成しています。かなり簡単です。

プラットフォームに依存しない、非GPL / LGPL手段(または、少なくともLinux、BSDなどのPOSIX準拠のOSで機能するもの)を探しているので、上下の矢印キーを使用して前後にスクロールできます私のCLIアプリケーションで以前に入力したコマンドの履歴全体を通して、それらを入力行に表示させます。

目標は、BASHや他のほとんどのシェルに見られる履歴機能を効果的に模倣することです。上/下キーだけを使って検出してもらいたいのですが。これには、割り込みまたは特殊なライブラリを使用する必要があると思います。ただし、これは標準のANSI Cで実行したいので、サードパーティのライブラリを完全に回避する必要があります。

4

4 に答える 4

7

自分でやろうと主張するなら、「自分でやる」以外に言えることはほとんどありません。それほど複雑ではありませんが、朝の仕事でもありません。

GNUreadlineの使用を真剣に検討する必要があります。これは、他のすべての人(を含むbash)が使用するものです。それはこれ以上のことをすべて行い、それをうまく行います。

于 2012-04-27T19:11:06.267 に答える
5

readlineを使用することも、簡単なルートを使用して何もしないこともできます。プログラムを実行するときは、rlwrapを介してプログラムを呼び出すと、無料で履歴編集を取得できます。言い換えれば、代わりに:

$ mytool

あなたはただ走る

$ rlwrap mytool

rlwrapは、readlineのラッパーであり、何もしなくてもreadlineのメリットを享受できます。

于 2012-04-27T19:20:11.710 に答える
4

bashが使用するreadlineライブラリを使用できます。これはGPLであるため、コードは内部またはGPLである必要があることに注意してください。機能が少ないBSDライセンスのlibeditがあります

于 2012-04-27T19:14:18.553 に答える
1

他の回答で述べられているように、あなたは本当にreadlineを使うべきです。それ以外の場合は、バッファを使用し、stdinファイル記述子を。とともに使用する必要がありますread()。履歴を含むデータ構造やファイルを設定する必要があります。また、コマンドをディスパッチするためexecvp()に使用することもできます。system()

于 2012-04-27T19:18:26.730 に答える