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.

questionAnswers(2)

yourAnswerToTheQuestion