Я пишу приложение, которое использует GnuPlot для построения данных. Вместо того, чтобы использовать текстовый формат для обмена обеими программами, хотя канал (медленный из-за vprintf() и большого количества передаваемых данных), я решил использовать «двоичный» формат.Отправить EOF в трубе, не закрывая его
Проблема в том, что в двоичном формате GnuPlot ожидает EOF (Ctrl + D) для завершения передачи и построения данных. Это легко в режиме консоли UNIX. Просто нажатие Ctrl + D закончит ввод данных, построит данные и откроет консоль, ожидая большего количества команд.
Но в моем приложении C++ единственный способ отправить EOF - это закрыть канал. Это приводит к тому, что процесс gnuplot умирает и не отображает график на экране.
¿Есть ли какой-то трюк для отправки EOF в трубу? ¿Как терминалу UNIX удается отправить EOF, не закрывая свою трубу с запущенным процессом?
PD: Я не могу закрыть и снова открыть GnuPlot с помощью «-perist», потому что он генерирует новый график вместо обновления старого сюжета (это система реального времени, так что она генерирует окна около окна inf inf).
Пробовал ли вы использовать библиотеку, которая обеспечивает прямой канал gnuplot? Подробнее здесь: http://ndevilla.free.fr/gnuplot/ – Azrael3000
Этот интерфейс кажется классным. Но я уже написал проект сам. В любом случае, я думаю, что он не обрабатывает «двоичный» формат ..... или, по крайней мере, я его не нашел. BTW Я уже использую прямой канал для gnuplot. – DarkZeros
Это может быть интересно и вам: http://users.softlab.ntua.gr/~ttsiod/gnuplotStreaming.html Он использует bash для выполнения трубопроводов. Но вы можете использовать stdout вашей программы для создания графика. – Azrael3000