2016-09-03 5 views
0

Ich habe cygwin auf Win8.1 ausgeführt, und während Eingabe von Eingaben zu einem Programm CTRL-Z verwendet, um EOF zu bezeichnen. Heute habe ich cygwin auf win10 installiert und "a.out" ausgeführt. Nach dem Eingeben der Eingabedaten, wenn ich STRG-Z drücke, bekomme ich die Meldung "Suspended" und ich bekomme die Shell-Eingabeaufforderung zurück. Ich habe das mit bash und csh versucht, dasselbe Ergebnis. STRG-D funktioniert auch nicht, es zerstört die Shell.Was ist EOF in cygwin in Windows 10

Nur um zu bestätigen, dass es nur dieses Problem und nichts anderes ist, habe ich eine neue Datei input.txt erstellt, die relevanten Eingabedaten eingegeben und "a.out < input.txt" ausgeführt, und es hat funktioniert fein. Das Problem besteht also nur darin, EOF für STDIN zu definieren.

Wie löst man dieses Problem?

Hinweis: ich diese Frage bin zu schließen, und reading till EOF in java on cygwin on windows-10

+0

ctrl-z ist der Unix-Befehl, um den Prozess zu unterbrechen. Haben Sie MSYS in Betracht gezogen? ctrl-D arbeitet dort. –

+1

Überprüfen Sie, wie der Tastaturtreiber Signale mit 'stty -a' generiert (suchen Sie unter' chars' nach 'eof'). Sie können die Einstellungen auch mit 'stty' ändern, aber ich empfehle das nicht. STRG + D "killt die Shell", weil Sie die Shell EOF senden. Du könntest 'set -o ignoreeof' verwenden. – cdarke

+0

Jean-Francoise: Ich benutze Cygwin, nicht msys. – R71

Antwort

2

Auf Unix-ähnlichen Systemen mehr Details in eine neue Frage gestellt in, einschließlich Cygwin, Ctrl-D (Standard) konfiguriert ist, ein Ende zu triggern -of-Datei Bedingung beim Lesen von einem tty (Terminal/Tastatur). Es ist möglich, dies mit dem Befehl stty zu ändern, aber es sieht so aus, als hättest du das nicht getan (und das solltest du mit ziemlicher Sicherheit nicht tun).

Wenn Sie Strg-D während der Ausführung Ihres Programms eingeben, das von der Standardeingabe liest, wird Ihr Programm wahrscheinlich beendet, je nachdem, wie es auf das Ende seiner Eingabe reagiert.

Ctrl-Z sendet ein Signal, das Ihr aktuelles Programm aussetzt (einige Programme, z. B. interaktive Shells, können dieses Signal verarbeiten oder ignorieren). (Windows verwendet Strg-Z, um das Dateiende auszulösen.)

Das von Ihnen beschriebene Verhalten zeigt an, dass Sie Strg-D an einer Shell-Eingabeaufforderung eingeben. Dies gibt die Shell, nicht Ihr Programm und das Ende der Datei Bedingung. Die Shell-Antwort darauf durch Beenden (standardmäßig; Sie können set -o ignoreeof verwenden, um der Shell mitzuteilen, sie zu ignorieren).

Wenn Sie Ctrl-D während der Ausführung Ihres Programms eingeben, sollte die Datei korrekt ausgelöst und das Ende der Datei erreicht werden und Ihr Programm beendet werden.

AKTUALISIERUNG: Normalerweise sollten Sie Strg-D entweder vor jeder anderen Eingabe eingeben (was dazu führt, dass das Programm überhaupt keine Eingabe erhält) oder sofort nach Eingabe von Return. Um das Dateiende in der Mitte einer Zeile auszulösen, müssen Sie zweimal Ctrl-D eingeben. (Dies ist normalerweise keine gute Idee, da es dazu führt, dass das Programm eine Teilzeile ohne abschließendes Zeilenumbruchzeichen sieht.)

+0

Ctrl-Z arbeitete als EOF in meinem Laptop mit Win8.1. In dem neuen Laptop mit win10 und mit einer neuen Installation von Cygwin funktioniert das nicht mehr. Wie gesagt, habe ich jetzt "set -o ignoreeof" gesetzt. Jetzt, wenn ich Strg-D nach den relevanten Eingaben drücke, passiert nichts (sieht so aus, als ob Strg-D einfach ignoriert wird), und wenn ich Strg-Z drücke, bekomme ich jetzt die Meldung "Gestoppt" anstelle von "Angehalten". Wie auch immer, das Programm stoppt an diesem Punkt und druckt seine erwarteten Ausgaben nicht. Nein, ich habe nicht benutzt. – R71

+0

Was ist die Ausgabe von 'stty' (ohne Argumente)? –

+0

Geschwindigkeit 38400 Baud; Linie = 0; ixany – R71