生モードで端末に文字を入力すると、相手のアプリケーションは入力した文字のASCIIコードを読み込みます。
しかし、端末でバックスペースを押すと、相手のアプリケーションは何を読みますか?
答え1
実際に端末に文字を入力すると、アプリケーションはその文字を読み込みます。
より正確には、端末に文字を入力すると、1つ以上のバイトに変換されます。ほとんどの最新のUnixシステムではUTF-8文字のエンコーディングです。アプリケーションはこれらのバイトを読み取り、文字を再結合します。これはまだASCIIコードではありません。 ASCIIは7ビットエンコーディングなので、ASCII文字セット内のすべての文字は1バイトに収まります。
機能またはカーソルキー(たとえば、、、など)を入力すると、次のようBackSpaceにTabエンコードReturnさF1れますLeft。制御文字またはエスケープシーケンス。 ^I(バイト値9)Tabや^M(バイト値13)など、ファンクションキーに対応する制御文字がありますReturn。他のほとんどのファンクションキーは、エスケープ文字(^ [、バイト値27)で始まるエスケープシーケンスを送信します。
BackSpace制御文字を送信します。歴史的な理由で送信される制御文字は、端末とその構成によって異なります。 ^H(バイト値8)または^?(バイト値127)のいずれかです。多くの最新の端末では、設定でこの設定を変更できます。バッファリングされていない/非標準モードでバックスペースを許可するには?。設定が自動的に選択されない場合は、を使用して宣言できますstty
。
詳細な背景情報については、以下を参照してください。キーボード入力とテキスト出力はどのように機能しますか?そしてGNU画面「コマンド文字」を定義するための包括的な可能性セットを提供する方法は?