具体的には、疑似端末の用語で言います。ファイル記述子master
とslave
擬似端末ペアがあるとします(制御端末であると仮定)。IXON
on master
(または同じもの)を無効にすると、これをslave
行うときにwrite(master, &control_s_code, 1)
このread(slave, &byte, 1)
コードが得られます。同じ懸念control_q_code
。問題は、無効化が何をするかということですIXOFF
。
答え1
IXOFF
pseudo-ttysでは実装されておらず、IXOFF
pseudo-ttyの設定は効果がありません。
IXOFF
入力キューがいっぱいになったときにttyドライバがもう一方のVSTOP
端に文字を送信するようにし(より多くのデータを送信しないように)、文字を処理し、スペースがVSTART
ある場合はもう一方の端に文字を送信する必要があります。より多くのデータ。
IXON
これは後者とは異なり、ttyドライバはVSTART
相手から送信された/文字を尊重し、()文字が受信されるまですべての転送を停止します。VSTOP
VSTOP
^S
VSTART
^Q
たとえば、擬似ttyの場合、「もう一方の端」がデフォルトのptyです。ターミナルエミュレータで設定の代わりにyesを押すと、^S
スレーブttyは入力した文字のエコーを停止し、ここに記録されたデータを表示します(スレーブttyがブロックまたは返されると、出力キューがいっぱいになるまでキューに保存されます)。IXON
IXOFF
write(2)
EAGAIN
カーネルは常にスレーブの入力キューがいっぱいであるかどうかを確認し(構造フィールドなどを確認することで)、マスターのptyに書き込むプロセスをブロックすることができるので、pseudo-ttyにフロー制御を実装する必要はありません。
ソフトウェアフロー制御は、実際のシリアル接続を使用する場合にのみ便利です。いいえRTS / CTSなどの帯域外信号:Unix、TCP、またはその他の「パイプライン」抽象化とは異なり、ワイヤはバッファリングされず、受信者がすべてのステータス変更を読み取るまで入力またはブロックされません。