Używanie standardowego strumienia io: stdin i stdout w exe matlab
Pytanie
Chcę, aby „nasłuchiwał” standardowego strumienia wejściowego w uruchomionym (skompilowanym) pliku wykonywalnym Matlab.
Tak sądzę, że tak się dziejec
lub podobny język:
#include stdio.h
fgets(line, 256, stdin)
Lub bardziej szczegółowo, może być używany jako taki:
if (!fgets(line, 256, stdin))
return;
if (line[0] == '\n')
continue;
sscanf(line, "%s", command);
Odpowiedź
Dla kompletności pozostawię tło i notatki nienaruszone, ale z pomocą Amro i EitanT udało mi się to rozwiązać.
tło
Znalazłem, jak to zrobić w innych językach, itutaj to niektóre instrukcje dotyczące procesu kompilacji.
Jednak nie znalazłem nigdzie, jak „nasłuchiwać” danych wejściowych w Matlab. Najbliższy jestemten opis IO podobnego do C w Octave, ale nie mogę zrobić postępu w tym zakresie, ponieważ szukam rozwiązania w MATLAB.
Należy pamiętać, że zmiana lub zawinięcie programu, który wysyła dane przez strumień, nie jest możliwe, i że wolałbym czyste rozwiązanie MATLAB, zamiast owijać cały program. Gdybym miał wywołać trywialną funkcję z MATLAB-a w innym języku, byłaby w porządku.
Co próbowałem?
próbowałem kilka funkcji z okna poleceń, takich jakfgets(0)
(fid = 0
wydaje się być identyfikatorem odpowiadającymstdin
(jak wspomniano w @EitanT i widziane podczas próbyfopen(0)
)), ale po prostu wraca:
Operation is not implemented for requested file identifier.
Rozważałem również użycie opcji w MATLAB do wywołania poleceń systemowych lub wykonaniajava
/ perl
komendy, ale do tej pory bez szczęścia. Nie jestem też pewien, czy nadal będą działać po kompilacji.
Ponadto próbowałem używaćinput('prompt','s')
to działa, gdy otwieram program przezcmd
, ale nic nie robi, dopóki nie wcisnę Enter. (Który program, którego oczywiście słucham, nigdy tego nie zrobi, w najlepszym przypadku, jaki mogę uzyskać\n
na końcu każdej linii).
Próbowałem też waitinput
zWymiana plików ale myślę, że to ślepy zaułek, ponieważ nic nie złapał i wydaje się, że działa dość słabo.
Uwagi
Używam Windows 7 i MATLAB 2012b.znalazłempopen
na wymiany plików ale to nie wydaje się być dostępne dla Windows.Kiedy po prostu wpisuję coś takiego'show me'
jest to prawidłowo wysyłane do standardowego strumienia wyjściowego.