1

VT 互換データ コレクタで実行するコンソール アプリケーションを作成しています。いくつかのエミュレーターを試してみたところ、標準的な動作が異なることがわかりました。

私の懸念は、ほとんどのエミュレーターにデータのローカルバッファーがあり、リターンを押すとサーバーに送信されることです。入力テキストを編集できます。

ユーザーが画面レイアウトを台無しにする可能性があるため、この機能は私には適していません。

文字のローカル エコーを無効にする (サーバーに文字を送り返す) ためのエスケープ コードと、RETURN キーを待たずにすぐにデータをサーバーに送信するように端末を設定するためのエスケープ コードは何ですか?

ありがとうございました

4

1 に答える 1

3

データをローカルにバッファリングする機能は、正規化と呼ばれます。それを無効にするには(エコーも)、次のようにします。

#include <string.h> /* for memcpy() */
#include <termios.h>

struct termios term_stored;
struct termios term_new;
tcgetattr(0,&term_old);
memcpy(&term_new,&term_stored,sizeof(struct termios));
term_new.c_lflag &= ~(ECHO|ICANON); /* disable echo and canonization */
tcsetattr(0,TCSANOW,&term_new);

/* your code */

tcsetattr(0,TCSANOW,&term_stored); /* restore the original state */

または、 libeditncursesまたは readlineの使用を検討してください。

于 2011-10-16T23:47:05.397 に答える