実行しcat
て入力a
してみましょう。終了しない^D
ことがわかります。cat
cat
+++と比較してみてくださいa
。これで猫が終了します。Enter
^D
それでは、なぜ最初のケースでは2回押す必要がありますが、^D
2番目のケースでは1回だけ押す必要がありますか?cat
^D
答え1
答えは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
得られます(1文字、EOL文字なし)。 2番目の結果は0を返し、これはEOFに達したことを示します。read(2)
a
^D
read(2)
cat