Dlaczego Process.StandardInput.WriteLine nie dostarcza danych wejściowych do mojego procesu?

to jest moje pierwsze pytanie tutaj, więc będę jak najbardziej szczegółowy. Obecnie pracuję nad programem C # (nazwijmy go TestProgram), który testuje inny program napisany w C (który będę nazywał StringGen). TestProgram ma uruchamiać StringGen w oknie poleceń, następnie podawać mu zestaw łańcuchów wejściowych i zapisywać dane wyjściowe dla każdego z nich. Po uruchomieniu StringGen uruchamia pętlę while, która czeka na dane wejściowe, przekazuje dane wejściowe do funkcji przetwarzania, a następnie zwraca wynik.

Mój problem pochodzi z tego, że próbuję wysłać TestProgram do StringGen. Zaczynam StringGen jako proces i próbuję go zasilić za pomocą Process.StandardInput.WriteLine (), a następnie szukam danych wyjściowych za pomocą Process.StandardOutput.ReadLine (). Zanim przejdę dalej, podam kod.

Oto główna funkcja StringGen:

int main() {
    char result[255];
    char input[255];

    do {
        fgets(input, 100, stdin);
        result = GetDevices(input); //Returns the string required
        printf("%s", result);
    } while (input != "quit");

    return 0;
}

Oto kod C #, w którym definiuję StringGen jako proces:

Process cmd = new Process();

ProcessStartInfo info = new ProcessStartInfo(command, arguements); // Command is the path to the C executeable for StringGen
info.WorkingDirectory = workingDirectory; // Working Directory is the directory where Command is stored
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.RedirectStandardError = true;
info.UseShellExecute = false;
cmd.StartInfo = info;
cmd.Start();

Następnie korzystam z tego procesu w następujący sposób:

using (var cmd)
        {
            // Loop through the input strings
            String response;

            foreach (exampleString in StringSet) // Loops through each string
            {
                cmd.StandardInput.WriteLine(exampleString.text); // This is the problem line
                response = cmd.StandardOutput.ReadLine(); // System comes to a halt here
                cmd.StandardOutput.Close();
                if (response == "Something")
                {
                     // Do this
                }
                else
                {
                     // Do that
                }
            }
       }

Wydaje się, że polecenie WriteLine nie daje żadnych danych wejściowych do StringGen, więc system zawiesza się w ReadLine, ponieważ StringGen nie przekazuje żadnych danych wyjściowych. Próbowałem uruchomić StringGen w wierszu poleceń i działa dobrze, pobiera dane z klawiatury i wyświetla prawidłowe ciągi znaków. Wypróbowałem wszystko, co mogę wymyślić i przeszukać na tej stronie, a inni próbowali znaleźć rozwiązanie, ale każdy przykład tego rodzaju kodu wydaje się działać dobrze dla wszystkich innych. Nie widzę, co robię źle. Jeśli ktoś mógłby zasugerować sposób, w jaki mogę przesłać dane wejściowe do mojego programu StringGen z TestProgram, byłbym naprawdę wdzięczny. Jeśli zostawiłem coś ważnego lub coś jest niejasne, daj mi znać.

Uwagi: Wypróbowałem zarówno skaner, jak i fgets w StringGen, oba dają ten sam rezultat.

Próbowałem użyć dosłownego ciągu z WriteLine (), ale nadal nie ma danych wejściowych.

Próbowałem użyć Write () i Flush () w TestProgram, ale bezskutecznie.

Próbowałem zamknąć () bufor wejściowy, aby wymusić kolor, ale to też nie ma żadnego efektu.

Nie jestem zbytnio zaznajomiony z C #, ponieważ edytuję kod innej osoby do wykonywania testów na StringGen.

questionAnswers(2)

yourAnswerToTheQuestion