2016-09-03 2 views
0

Раньше я запускал cygwin на win8.1 и давал входные данные для программы CTRL-Z, используемой для обозначения EOF. Сегодня я установил cygwin на win10 и запустил «a.out». После ввода входных данных, когда я нажимаю CTRL-Z, я получаю сообщение «Suspended», и я возвращаю приглашение оболочки. Я пробовал это с bash и csh, таким же результатом. CTRL-D также не работает, он убивает оболочку.Что такое EOF в cygwin в окнах 10

Чтобы подтвердить, что это только эта проблема, и ничего больше, я создал новый файл input.txt и ввел в него соответствующие входные данные и запустил «a.out < input.txt», и он работал хорошо. Поэтому проблема заключается только в определении EOF для STDIN.

Как решить эту проблему?

Примечание: Я закрываю этот вопрос, и поставить в более подробно в новом вопросе reading till EOF in java on cygwin on windows-10

+0

ctrl-z - это команда unix для приостановки процесса. Вы считали MSYS? ctrl-D работает там. –

+1

Проверьте, как драйвер клавиатуры генерирует сигналы с помощью 'stty -a' (ищите' eof' под 'cchars'). Вы можете изменить настройки с помощью 'stty', но я не рекомендую это делать. CTRL + D «убивает оболочку», потому что вы отправляете оболочку EOF. Вы можете использовать 'set -o ignoreeof' – cdarke

+0

Jean-Francoise: Я использую cygwin, а не msys. – R71

ответ

2

В Unix-подобных системах, в том числе Cygwin, Ctrl-D является (по умолчанию), сконфигурированный, чтобы вызвать конец Состояние файла при чтении с tty (терминал/клавиатура). Это можно изменить с помощью команды stty, но похоже, что вы этого не сделали (и вы почти наверняка не должны этого делать).

Если вы введете Ctrl-D во время работы своей программы, которая читает со стандартного ввода, это, скорее всего, закончит вашу программу, в зависимости от того, как она реагирует на достижение конца ее ввода.

Ctrl-Z посылает сигнал, который приостанавливает вашу текущую программу (некоторые программы, такие как интерактивные оболочки, могут обрабатывать или игнорировать этот сигнал). (Windows использует Ctrl-Z для запуска конца файла.)

Поведение, которое вы описываете, указывает, что вы набираете Ctrl-D в командной строке. Это дает оболочку, а не вашу программу и состояние конца файла. Ответ оболочки на это путем завершения (по умолчанию, вы можете использовать set -o ignoreeof, чтобы сообщить оболочке игнорировать его).

Если вы набрали Ctrl-D при запуске вашей программы, он должен правильно вызвать и завершить состояние файла и привести к завершению работы вашей программы.

UPDATE: Обычно вы должны набирать Ctrl-D либо перед любым другим вводом (в результате чего программа не принимает никакого ввода), либо сразу после ввода Return. Чтобы запустить конец файла в середине строки, вам нужно набрать Ctrl-D дважды. (Это, как правило, не очень хорошая идея, так как это приводит к тому, что программа видит частичную линию без завершающего символа новой строки.)

+0

Ctrl-Z используется как EOF в моем ноутбуке, используя win8.1. В новом ноутбуке, использующем win10, и с новой установкой cygwin, это больше не работает. Как мне советовали, я теперь «установил -o ignoreeof». Теперь, когда я нажимаю Ctrl-D после соответствующих входов, ничего не происходит (похоже, что Ctrl-D просто игнорируется), и когда я нажимаю Ctrl-Z, теперь я получаю сообщение «Stopped» вместо «Suspended». Но в любом случае программа останавливается в этой точке и не печатает ожидаемые результаты. Нет, я не использовал stty. – R71

+0

Что такое вывод 'stty' (без аргументов)? –

+0

скорость 38400 бод; line = 0; ixany – R71

 Смежные вопросы

  • Нет связанных вопросов^_^