以下はASCII形式の制御文字です(黄色で強調表示されています)。
これらの制御文字のいずれかを送信するにはライン規律たとえば、制御文字をCtrl+someChar
送信するには、端末で入力します。0x03
Ctrl+C
これで、Linuxは画像に表示されているすべての制御文字をサポートしますか、それとも一部をサポートしますか?
編集する:
「サポート済み」とは、次に送信できるかどうかを意味します。ライン規律ターミナルから。しかし、ちょうど次を見つけました。文書、14個の制御文字のみがサポートされていることが示されているので(ASCIIテーブルの33個の代わりに)私の質問に対する答えは次のとおりです。いいえ、ASCII テーブルのすべての制御文字がサポートされるわけではありません。
答え1
はい。
端末は、シリアルデバイス(実際の端末の場合)を介して、必要な文字(コントロールなど)をラインフィールドに送信してからアプリケーションに送信できます。
ライン規約が次の場合非標準入力モード、私はあなたの「に答えている間行規律が制御文字を処理できないようにする「問題が発生した場合、アプリケーションは行規則がある場合は端末から送信された文字を読み取ることができます。標準入力モードこれにより、単語や行削除文字などの文字編集が行規則に従って実行されます。
最新のシェル(1980年代以降)は、非正規入力モードを使用し、すべての編集機能を独自に実行し、端末で生成された生の文字ストリームで動作します。これらのシェルが別のプログラムを呼び出すと、ターミナルを標準入力モードに切り替えるので、Cプログラムを実行するときにラインルール編集が適用されることがわかります。
端末からライン規約で送信できる場合は、「サポート済み」を意味します。ところで、「Linux control_codes(4) のマニュアルページ」を見つけたのですが、ここには 14 個の制御文字だけがサポートされるという内容が示されています。
入力と出力を混同しています。マニュアルページには、カーネルに組み込まれた端末エミュレータが制御コードを解釈する方法が記載されています。に送る端末は制御コードについては知らない。次から受信しました末端。
ASCIIの制御文字
ASCIIは7ビット文字セットです。また、1980年代から、実際には1980年代よりずっと前から8ビット文字セットに関するアイデアがありました。 8ビット文字セットには、2番目の制御コードセット「C1」制御コードがあります。
ラインに8つのデータビットがあるようにシリアルデバイスを設定し(実際の端末の場合)、ラインルールは8ビット文字をサポートし、再び非正規モードでは8ビットセット全体の各文字を送信できます。 C0制御コード、C1制御コードなど、端末からアプリケーションまで。
答え2
Linuxのさまざまなレベルとビルディングブロックについて混乱しているようです。
これライン規律Ctrl-Cのみが解釈され(SIGINT
フォアグラウンドグループ内のすべてのプロセスにシグナルを送信します)、有効になっている場合はソフトウェアフロー制御文字Ctrl-SとCtrl-Qが解釈されます。
様々な種類端末さまざまな制御シーケンスについて説明してください。xterm主に基づいてVT100制御順序を解釈するか、快適あなたが見つけた順序です。
その他のアプリ他の制御シーケンスも解釈できます。たとえば、メインフレーム処理をシミュレートするレガシーアプリケーションはFS
、GS
および区切り文字を解釈できますRS
(US
Linuxではレコード指向ではないため、これを使用する人がいません)。
「この制御順序は常にこの特定のものを意味する」と言う中心点はありません。また、どのような方法でもすべてのASCII制御文字を解釈する必要はありません。
編集する
生産ラインの規律無関係ライン編集。これワイヤー回線規則では、「回線接続」とは、外部機器(端末)をコンピュータに接続する電気的接続(電話線など)を意味します。回線分野の使命は、その接続のトラフィックを制御することです。これがソフトウェアフロー制御文字を解釈する理由です。カーネルには、さまざまな種類の制御に異なるラインルールがあります。
ライン編集完全に実行しているアプリケーションによって異なります。たとえば、bash
emacsやviを模倣する方法でキーストロークを解釈するラインエディタがあります。これがCtrl-W(emacsモードで)が単語を削除する理由です。そして今回の課題は何もないASCIIと完全に関連しています。
もう一度説明しますが、Linuxシステムはさまざまな部分で構成されており、各部分は制御文字を独自の方法で解釈します。
答え3
これライン規律端末関連擬似端末。読むttyが公開されました最初のページ。それでは読んでください。用語(3)。端末には複数の状態があります。スティティ(1)。一部の州では制御文字を処理しません。他の州ではこれらすべてを処理しません(たとえば、DC3
特定の処理がない可能性があります)。
ターミナルは非常に複雑です(実際の物理学ではレガシーです。)端末そうVT100廃止され、2017年にのみ博物館にあります。仮想端末これは実際にはLinuxで使用されています。)次のライブラリを使用することをお勧めします。呪いコードを書きたい場合テキストベースのユーザーインターフェース(または同様のもの読書船行ベースが必要な場合)。また、見ることができます用語キャップそして読んでくださいANSIエスケープコード。ところで、ほとんどのインタラクティブシェル(例:または:応用プログラム(ターミナルbash
と)...zsh
vim
libreadline
libtinfo
libncurses
gnome-terminal
xterm
しかし、2017年にはUTF-8はどこでも(いいえASCIIコードこれ以上)、さらに端末エミュレータ~について知っているUTF-8。Unicodeより複雑な動作が必要です(ユーザーが同じ入力行に左から右に、右から左に書き込む言語(英語、ヘブライ語、アラビア語など)を混在させることを検討してください)。ほとんどの端末エミュレータの動作は設定可能です。たとえば、音声ビープ音を有効または無効にしたり、ちらつきのみをBEL
有効にしたりできます。
そして、さまざまな制御文字のサポートは異なるレイヤーで発生する可能性があります(または一部の制御文字には特別な意味がないために発生しない可能性があります)。
最後に、GUI(そしてウィジェットツールキット良いQtまたはGTK+)とWebインターフェース(次のようないくつかのHTTPサーバーライブラリを使用できます。リボニオン)は以前よりも広く使用されています。
文を書きたいならテキストベースのユーザーインターフェース今日のアプリケーションには、いくつかの追加ライブラリ(たとえば...など)を使用することをお勧めしますncurses
。
ただし、一部の動作はユーザーまたは擬似端末ごとに調整または構成でき、他の端末エミュレータもある程度構成できます。コンソールコード(4)、ロケール(7)、アスキー(7)、UTF-8(7)、文字セット(7)、環境(7)、個人有限公司(7)、信号(7)、学期(7)、用語(7)、Unicode(7)。
また、特定の端末エミュレータを設定または改善することもできます(これはフリーソフトウェア、特定の要件に合わせてソースコードを研究してパッチを適用することができます(そして便利な操作を実行したい奇妙な制御文字に特定の動作を追加できます)。奇妙な制御文字を使用する特定の端末エミュレータの動作は、そのエミュレータに固有のものです。ほとんどが一部をスキップまたは無視します。
しかし、あなたは持つことができますデバイスファイル(例:モデム、キーボードなど)とファイル(またはソケット(7)-s)任意のバイトシーケンスを処理します(ASCIIまたはUTF-8である必要はありません)。文字エンコーディングはい伝統的なのみ)。
AFAIK、多くの制御文字(特に水平タブと垂直タブ、キャリッジリターン、フォームフィード、エスケープなど) - おそらく、ほとんどはカーネルコードに実装されている行ルールによって処理されません。ただし、これはアプリケーションコード(特にncurses
またはを使用するコードreadline
)と端末エミュレータ(たとえば、gnome-terminal
または)でxterm
知られています。