2011-02-10 17 views
1

VT互換のデータコレクタで動作するコンソールアプリケーションを作成しています。 いくつかのエミュレータを試した後、私はそれらが異なる標準的な動作をしていることが分かった。VTターミナル - ローカル編集とエコーを無効にする

私の関心事は、ほとんどのエミュレータはローカルのデータバッファを持っていて、私がreturnキーを押すとサーバに送信することです。それは私が入力テキストを編集することができます。

この機能は、ユーザーが画面レイアウトを混乱させる可能性があるため、私にとっては好ましくありません。

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

ありがとうございました

答えて

4

データをローカルにバッファリングする機能は、キャノン化と呼ばれています。これを無効に(だけでなく、エコー)するために行います。

#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の使用を検討してください。

関連する問題