質問

私は受験のために勉強していて、私はどのように標準的なUnixの内の非標準的な入力/出力作品(例えば、呪い)対へと混乱しています。私は「ライン規律が」標準的な入力のために適用されるバッファがあることを理解しています。これは、バッファが非標準入力のためにバイパスされ、またはそれは単に回線に規律が適用されないことを意味していることを意味するのでしょうか?どのようにこのプロセスは、入力と出力の操作に違うのでしょうか?

私はそれを証明標準的な入力で働いている呪いのプログラムでは、ユーザーが入力した入力が自動的に入力されたいずれかの特定の文字数がタイプされているか、一定の時間が経過した後に。これらのもののいずれかの「ライン規律」と考えるか、これは完全に何か他のものですされていますか?

役に立ちましたか?

解決

標準的な入力のために - シェルを考えます。バッシュや親戚は、コマンドライン編集を持っているので、実際に、昔ながらのBourneシェルと思います。あなたは、入力の行を入力し、前の文字を消去するために、入力を間違えた場合は、(時には 削除デフォルトは通常、バックスペース)で消去文字を使用します。完全にあなたが台無しにした場合は、(、完全に標準化されていないことが多いコントロール-X )行削除文字と行全体を取り消すことができます。いくつかのシステムでは、単語の消去とコントロール-W を取得します。このすべてが標準的な入力です。行全体が集まり、行末文字まで編集された - 戻るを - 押されました。そこで、行全体が待っているプログラムで利用できるようになります。傑出しているread()システムコールによっては、行全体が(read()への一つ以上の呼び出しによって)読み取ることが利用できるようになります。

非標準入力の場合 - あなたは文字を押すと、それはプログラムにすぐに利用可能である - viまたはvimまたは何だと思います。あなたはリターンを打つまで、あなたは持ちこたえていません。システムは、文字のない編集しません。彼らはすぐに彼らが入力されてプログラムが利用できるようにしています。これは、適切に物事を解釈するプログラム次第です。さて、vimは、標準的な入力のようなビットを見て多くのことをしますか。例えば、バックスペースは後方に移動し、入力モードにあったものを消去します。 vimは、それがそのように動作させることを選択したので、しかし、それはです。

正規と非正規の出力はそれほど深刻なビジネスです。そこ改行の前にキャリッジリターンをエコーするかどうかのようなものに関連する差の数こまごまとは、ある、とエレクトロニクスとの必要な遅延(ないを行うかどうか、重要な出力デバイスは110-だったかもしれない日にボーテレタイプ)。再びテレタイプ、 - それはまた、ハンドルの大文字と小文字を区別しない出力デバイスのようなものを行うことができます。小文字は、バックスラッシュとキャップとしてキャップに出力し、大文字である。

それはあなたがログインプロンプトにすべて大文字を入力した場合、その後、ログインプログラムが自動的にすべてのキャップが各実際の資本の前にバックスラッシュで出力したモードに変換することを可能に使用されます。私は、これはもはや電子端末上で行われていないことを疑います。

<時間>

コメントでは、TitaniumDecoyは尋ねます:

  

非標準入力とだから、完全にバイパス入力バッファのですか?また、どこラインの規律は来るのか?

非標準入力と、入力バッファがまだ使用されています。端末からの入力を待ってread()コールとはプログラムが存在しない場合は、文字が入力バッファに保持されています。何起こらないことは入力バッファのいずれかの編集です。

ラインの規律は、入力編集が行う操作のセットのようなものです。だから、ライン規律の一の態様は、消去文字が標準的な入力モードで、前の文字を消去していることです。もしicase(入力ケースマッピング)セットを持っている場合は、大文字の文字が小文字のためにバックスラッシュが先行しない限り、マッピングされます。それはラインの規律、私は信じている、またはライン規律の側面です。

<時間>

私はEOF処理を言及するのを忘れた(コントロール-D )カノニカルモードで処理されます。それは実際には「read()に蓄積された入力を利用できるようにする」という意味します。全く蓄積入力がない場合(入力した場合、行の先頭に制御-D )、次いでread()次いでプログラムによってEOFとして解釈されるゼロバイトを返します。もちろん、あなたは陽気その後、キーボード上の複数の文字を入力することができ、およびEOFを無視(または非標準モードで実行)するプログラムは非常に幸せになります。

もちろん、標準的なモードでは、キーボードでタイプされた文字は、通常は画面に表示されています。あなたはthaのかどうかを制御することができますトンのエコーが発生します。しかしながら、これは、カノニカル入力に幾分接線方向です。エコーがオフの場合でも、通常の編集が発生します。

同様に、割り込み、信号を終了は、カノニカルモード処理のアーチファクトです。だから、あまりにものようなジョブ制御信号であるコントロール-Zは、現在のプロセスを中断し、シェルに戻ります。同様に、フロー制御(コントロール-S コントロール-Q 停止し、出力を開始する)正規モードによって提供される。

Rochkindの高度なUnixのプログラミングの第4章では、第二EDN には、/ターミナルIをカバー全体の多くと - Oと、この情報の多くを提供します。その他のUNIXプログラミングの本(少なくとも、良いもの)も、それをカバーします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top