Sende mal zwei ^D direkt hintereinander. Wenn das tty-Device im
Canonical-Mode ist ("stty -F /dev/ttyS0 -a" enthält "icanon" ohne ein
"-" davor, ansonsten mit "stty -F /dev/ttyS0 sane" die
Terminal-Einstellungen zurücksetzen), dann sollte das zu einem EOF und
Beendigung des cat führen.
Der Hintergrund ist der, dass das EOF-Zeichen (^D) eigentlich nicht
wirklich EOF bedeutet. Stattdessen wird der aktuelle Zeilenpuffer des
Terminals an die lesende Anwendung gesendet. Enthält der Puffer keine
Zeichen mehr (was direkt nach einem Newline oder eben einem EOF-Zeichen
der Fall ist), dann werden exakt 0 Zeichen an die Anwendung geliefert,
was dann eben EOF signalisiert.
Beobachten kannst du das auch, wenn du einfach so ein "cat >/dev/null"
machst, also mit deinem lokalen Terminal (z.B. xterm oder so). Drückst
du ^D, bevor du irgendetwas anderes eingegeben hast, wird das cat sofort
beendet. Gibst du aber zunächst ein paar Zeichen ein, ohne Enter zu
drücken, dann braucht es zwei ^D, um das cat zu beenden.
Das erste ^D taucht dabei übrigens trotzdem nicht im Datenstrom auf, du
musst das also auch nicht aus dem generierten Output entfernen.
Andreas