Стандартные входы и выходы для запуска процесса с использованием оболочки tcl - PullRequest
0 голосов
/ 07 февраля 2020

Я пишу плагин Eclipse для отладчика, похожего на GDB. Этот отладчик написан на C и использует библиотеку TCL для обработки команд. Интерфейс отладчика создает и добавляет расширения TCL, которые обрабатываются с помощью TCL Shell. Я пытаюсь запустить исполняемый файл отладчика из моего java кода и прочитать стандарт на входе и выходе для связи с приложением. Но мой java процесс не получает ничего по обеим каналам. Если я изменю исполняемый файл на gdb, мой лог c будет работать нормально.

Я никогда раньше не использовал Tcl и не уверен, имеет ли оболочка Tcl какое-либо отношение к блокировке и удалению процесса? Пожалуйста, укажите ваши входные данные или любые возможные указатели на это.

1 Ответ

0 голосов
/ 08 февраля 2020

Наиболее вероятная проблема в этой области связана с отсутствием сброса вывода в другом процессе, и это может быть проблемой в обоих способах. На стороне Java вы должны вызывать метод flush() на устройстве записи после того, как вы написали полное сообщение (часто целую строку). На стороне Tcl вы используете flush stdout после написания строки или настраиваете стандартный выходной канал так, чтобы автоматически flu sh после записи каждой строки:

fconfigure stdout -buffering line

С двоичным протоколом вы ' Вместо этого полностью отключите буферизацию (none вместо line) и просто убедитесь, что сообщения полностью собраны перед каждой записью.

...