

$ cat
You sound very nice :)
You sound very nice :)
Bye<ctl-d>Bye
Oh wait, and cool too
Oh wait, and cool too
<ctl-d>
$
The Ctl-D didn’t end the file when i typed “Bye” :( it only worked when I pressed Ctl-D on its own line. So how does cat know that it should ignore the EOF character if there is some text that comes before it?
What Ctl-D does is flush the input to the program, and the program sees how big that input is. If the length of the input is 0 that is interpreted as EOF. So Ctl-D is like Enter because they both flush the input, but Ctl-D is unlike Enter because it does not append a newline before flushing, and as a consequence you can send empty input (aka an EOF “character”) with Ctl-D.
we have a truly marvelous application process, which this margin is too small to contain