Использование стандартного потока io: stdin и stdout в exe matlab
Вопрос
Я хочу, чтобы он «слушал» стандартный поток ввода в исполняемом (скомпилированном) исполняемом файле Matlab.
Вот как я считаю, что это сделано вc
или похожий язык:
#include stdio.h
fgets(line, 256, stdin)
Или более подробно, это может использоваться как таковое:
if (!fgets(line, 256, stdin))
return;
if (line[0] == '\n')
continue;
sscanf(line, "%s", command);
Ответ
Для полноты картины я оставлю фон и заметки нетронутыми, но с помощью Amro и EitanT мне удалось это решить.
Фон
Я нашел, как это сделать на других языках, иВот некоторые инструкции для процесса компиляции.
Однако я нигде не нашел, как «прослушать» входные данные в Matlab. Самое близкое, что я пришел, этоэто описание C-like IO в Octave, но я не могу добиться прогресса в этом, так как я ищу решение в MATLAB.
Обратите внимание, что изменить или обернуть программу, которая отправляет данные через поток, невозможно, и что я предпочел бы чисто решение MATLAB, а не обертывание всей моей программы. Если бы я вызывал тривиальную функцию из MATLAB на другом языке, это было бы нормально.
Что я пробовал?
Я пытался несколько функций из окна команд, таких какfgets(0)
(fid = 0
кажется, идентификатор, соответствующийstdin
(как упомянуто @EitanT и видно при попыткеfopen(0)
)) но это просто возвращает:
Operation is not implemented for requested file identifier.
Я также рассмотрел использование опции в MATLAB для вызова системных команд или выполненияjava
/ perl
команды, но пока без везения. Я также не уверен, будут ли они работать после компиляции.
Кроме того, я попытался использоватьinput('prompt','s')
это работает, когда я открываю программу черезcmd
, но ничего не делает, пока не нажму ввод. (Что программа, которую я слушаю, конечно, никогда не будет делать, в лучшем случае я могу получить\n
в конце каждой строки).
Я тоже опробовал waitinput
изОбмен файлами но я думаю, что это тупик, поскольку он ничего не поймал и, кажется, работает довольно плохо.
Примечания
Я использую Windows 7 и MATLAB 2012b.я нашелpopen
на обмен файлами но это, кажется, не доступно для Windows.Когда я просто набираю что-то вроде'show me'
это правильно отправляется в стандартный поток вывода.