Подтвердить что ты не робот

Передача конца передачи (Ctrl + D) в консоли Eclipse CDT

У меня есть приложение на С++, которому нужно отправить сигнал End of Transmission.

Я могу сделать Ctrl + D на консоли, но когда я пытаюсь сделать это в Eclipse, это не сработает.

Я использую Eclipse Galileo с CDT.

4b9b3361

Ответ 1

Кажется, что проблема с еще не решена.: ошибка 159803 ( разрешено в сентябре 2015 года для CDT 9.0)

Так как Eclipse 3.1 можно сигнализировать EOF (используя CTRL + D/Z - привязываемый по ключевым настройкам) в представлении консоли, и я успешно проверил это с Eclipse 3.2.1, используя простой Приложение Java.
CDT, с другой стороны, не узнает EOF при просмотре консоли.
Есть одно исключение, хотя.

Если я запустил локальное приложение C/С++ и снимите флажок "Connect process input & output to a terminal" на главной вкладке конфигурации, консольное представление распознает EOF.

Однако это изменение не влияет на представление консоли в перспективе Debug. Поэтому во время отладки все еще невозможно передать сигнал EOF запущенному приложению.

Даже если он считается "разрешенным", этот комментарий показывает, что проблема сохраняется.


Обновление 4 года спустя (декабрь 2014 года), Фернандо Гонсалес-Санчес упоминает в комментариях:

Флажок "Обходной путь" больше не доступен в пользовательском интерфейсе.
Проблема все еще происходит в OpenSUSE 12 и Eclipse CDT Luna 4.4.1.


Обновить март 2015:

Мухаммед Аннакиб упоминает в комментариях:

Существует новое обходное решение, упомянутое на странице с ошибкой:

В Kepler 4.3 eclipse.buildId = 4.3.0.M20130911-1000 в Linux проблема все еще существует в консоли Java. Я нашел следующее обходное решение:

     

"Если вы оставите консоль для фокусировки на другом представлении, а затем перефокусируйтесь на консоли, тогда CTRL - D (EOF) работает так, как ожидалось."

Ответ 2

Я нашел решение этой проблемы:

Когда вы закончите ввод своих входов на консоли, нажмите на другое окно (редактор, Project Explorer и т.д.), затем нажмите на консоли. Нажатие Ctrl + Z теперь будет работать.

Ответ 3

Обновление

2015: я использую eclipse luna 4.4.1 для mac и EOF по-прежнему не работает в консоли. Он просто замораживает затмение.

Ответ 4

Один из способов, по которому вы можете отправить ctrl + d в консоль, - это сделать небольшую инъекцию BASH в аргументы вашей программы. добавление чего-то типа "& sleep 10 && echo -e '\ x04\c' > /dev/stdin", например, будет ждать 10 секунд перед отправкой команды ctrl-D. хотя вы можете легко изменить его и для некоторых других условий, отличных от времени. Кроме того, вы можете открыть /dev/stdin из вашей программы на С++ в качестве файла, а затем записать в него значение 0x04, затем свернуть, чтобы добиться того же эффекта от вашей программы.