
答え1
吹くした標準入力(stdin)(つまり端末)から入力を受け取ります。
端末は、次の 2 つのいずれかです。モデル:生のまたは料理(「文字モード」と「ラインモード」とも呼ばれ、「raw」と「cooked」という用語は主にUnixの世界で使用されています。) 。生モードでは、端末は入力を直ちにアプリケーションに送信します。クッキングモードでは、端末はライン全体を読み取り(非常に原始的な)ライン編集メカニズムを提供し、ユーザーがクリックしたときにのみデータをアプリケーションに転送しますEnter。
端末はクッキングモードで起動します。 Bashなどの入力をさらに制御したいアプリケーションは、ユーザーがコマンドを入力するのを待っている間に端末をrawモードに設定します。
答え2
端末デバイスファイルに添付されたファイル記述子(例:fd0)を持つすべてのプログラムは、端末が「送信」するまでその行のテキストを表示できないように、端末がキーボードを介して受信したテキストの各行をバッファリングすると考えます。 。を押します Enter。
(シェルの行エディタがこの問題をどのように解決するかはわかりませんが、クリックする前に確実にテキストを取得しますEnter。)
また、シェルが子プロセスを開始すると(この場合ping
)、子プロセスの実行中に停止/停止状態になるため、端末がwait
テキストを保持しなくてもシェルはこれを無視して意味があると仮定します。サブプロセスプロセスの場合。
画面に表示されるテキストは次のとおりです。端末表示されていますが、子プロセスが終了し、シェルが「起きて」テキストがシェルラインエディタに送信されるまで、どのプログラムもこれをキャッチして何もしません。すべての端末が必ずしもそうするとは思わない。