stdin und "Ctrl + D"

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
snafu
User
Beiträge: 6744
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Das ist tatsächlich so. Bei Strg+Z erscheint erstmal nur ein ^Z im Terminal und man muss die Eingabe anschließend mit Return abschließen. Als End-Of-File wird es per Konvention auch nur interpretiert, wenn innerhalb der Zeile keine anderen Zeichen stehen. Deshalb kann man unter Windows auch problemlos ord("^Z") schreiben und erhält die von dir schon beschriebene 26 als Rückgabe anstelle eines beendeten Interpreters. Gemeint ist dabei natürlich ein ^Z, was durch Strg+Z entstanden ist, denn nur dann wird es als *ein* Zeichen interpretiert. Im Grunde kann der Prozess aber selbst bestimmen, wie er ^Z interpretiert bzw. ob er das überhaupt tut. Windows macht da AFAIK keine Vorarbeit.

Übrigens, Strg+C sendet wie unter Linux unmittelbar ein Kill-Signal an den Prozess. Da landet also kein Zeichen vorher in der Konsole.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@snafu: Sicher das der empfangende Prozess entscheidet was er beim Strg-Z-Zeichen macht? Ich hätte gedacht das bekommt der gar nicht erst zu sehen. Bei normalen Dateien regelt das nämlich nicht das Programm soweit ich weiss. Wenn man in C unter DOS oder Windows eine Datei als Textdatei öffnet, dann betrifft das nicht nur die Übersetzung von Zeilenenden, sondern das lesen der Daten hört beim ersten Byte mit dem Wert 0x1A auf. Das Zeichen selbst sieht das C-Programm schon nicht mehr.

Mit Python kann man das nicht mehr so richtig testen, jedenfalls nicht mit `open()` weil Python (3) keine Dateien mehr im Textmodus öffnet, sondern immer im Binärmodus.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
snafu
User
Beiträge: 6744
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Prozess war sicherlich missverständlich ausgedrückt. Meistens ist auf unterster Ebene ja C "vorgeschaltet". Und da übernimmt die entsprechende Implementierung das. Beim Tiny C Compiler (TCC) war es aber mal so, dass mit ihm geschriebene Programme keine Sonderbehandlung für Strg+Z eingebaut hatten. Also da musste man sich selber drum kümmern. Das ist natürlich ein exotischer Randfall, aber zeigt, dass die Behandlung nicht im OS "verdrahtet" ist.
Benutzeravatar
snafu
User
Beiträge: 6744
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Falls es wen interessiert, hier wird ausführlich beschrieben, dass sich die Konsole unter Windows bei der Eingabe von EOF (Strg+Z) anders verhält als beim Lesen einer Datei:

https://stackoverflow.com/a/43871772

Es ist sehr technisch, aber man erfährt auch, wie man die Konsole dazu bringen kann, ohne explizites EOL ("\r\n" bzw. Enter-Taste) auf Strg+Z zu reagieren.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@snafu: Das war in der Tat eine interessante SO-Antwort. Danke für den Link. 🙂
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten