cat
を実行してから、a
、次に^D
と入力します。cat
が終了しなかったことがわかります。
cat
+ a
+ Enter
+ ^D
と比較してください。猫は終了しました。
では、最初のケースでcat
を終了するのに2回の^D
プレスが必要で、2番目のケースで1回の^D
だけが必要なのはなぜですか。
答えはtermios(3)
のマニュアルページにあります。
_ VEOF (004, EOT, Ctrl-D) End-of-file character (EOF). More precisely:
this character causes the pending tty buffer to be sent to the
waiting user program without waiting for end-of-line. If it is
the first character of the line, the read(2) in the user program
returns 0, which signifies end-of-file. Recognized when ICANON
is set, and then not passed as input.
_
最初に_^D
_を押すと、入力した行がcat
に配信されるため、read(2)
の結果はa
(1文字、EOLなし)になります。 char)。 2番目の_^D
_は、read(2)
が0を返すようにします。これは、EOF to cat
を意味します。