問題タブ [termcap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
444 参照

c - Cプログラムの非正規端末モードバッファstdout

私は学校のプロジェクトに取り組んでいます(非常に基本的なシェルを構築しています)。

アイデアは、bash のようにライン エディションを実行できるようにすることです。このために、端末モードを非標準に変更し、エコーを停止します。

私は自分の問題を公開するために非常に単純なコードを作成しました (注意してください、私は関数の戻り値などをチェックします...この記事ではできるだけ短くしました)

したがって、基本的には、ユーザーエントリをキャッチするための読み取りのループです。'c' で画面をクリアし、'b' で char を出力し、'q' で元の端末モードを中断して復元します。

問題は次のとおりです。

「q」でループを中断するまで何も起こらないため、何かを入力するたびにバッファリングされているように見えます。この時点で、出力が画面に表示されます。b を 5 回入力すると、5 回の b が表示され、「c」を入力すると画面がクリアされます。ただし、「q」を入力した後のみ。動作は、元の端末モードを復元する場合も復元しない場合も同じです。( の前の最後の行return)

私が疑うもの:

コードを非常に短くしてすべてのリターンをチェックした後、端末モードを変更する方法に問題があるだけだと思う​​傾向がありますか? フラグTCSAFLUSHと関数を試してみると、同じ結果が得られましたTCSADRAINtcsetattr

ありがとう !:)

0 投票する
1 に答える
423 参照

c - Cで入力部分に書き込む方法は?

私は学校のプロジェクトのために C でミニ シェルを作成しようとしています。私がやりたいのは、一種のコマンド履歴 (シェルのように) を実行することです。UP キーを押すと、前の入力が入力部分に書き込まれます。 、DOWN は反対のことを行います...そして、Enter キーを押してプログラムに送信する前に、次のように編集できます (下手な英語で申し訳ありません): [] はユーザー カーソルを表します。

termcaps とその他の関数を使用することが許可されていますisatty, ttyname, ttyslot, ioctl, getenv, tcsetattr, tcgetattr, tgetent, tgetflag, tgetnum, tgetstr, tgoto, tputs

ioctl問題は、関数と関数のドキュメントを理解できないことです。またtty、これらの関数について、例を含む十分に説明されたチュートリアルが見つからず、それらを使用して何をしようとしているのかについてのドキュメントも見つかりません。

誰かがこれらの機能をわかりやすい方法で説明できますか? そして、私がやろうとしていることにそれらをどのように適用する必要がありますか (Linux-MacOs 互換性の方法を探しています) 助けてくれてありがとう。