Ich schrieb ein Programm, das eine Nachricht druckt, erwartet eine Benutzereingabe und druckt eine Nachricht erneut. Das einfache Beispiel unten veranschaulicht das. Das Programm wird mit 'prog | gestartet tr 'a-z' 'A-Z'. Nur der letzte Druck sollte von 'tr' a-z '' A-Z 'gehandhabt werden.Umleiten einer Shell erstellt Rohr
int main()
{
char name[99];
printf ("Your name: ");
scanf ("%98s", name);
printf ("Your name is: %s\n", name);
return 0;
}
Ich habe viel mit Pipe, dup, dup2 versucht, aber nichts hat bisher funktioniert. Hat jemand eine Idee, wie ich mein Problem lösen kann?
Vielen Dank für Ihre Antwort. Ich dachte an Stderr, aber ich hoffte, ich könnte den Missbrauch von Stderr vermeiden. –
@NickBendner Warum versuchen Sie, "die Shell erstellte Pipe umleiten"? – jdarthenay
Unter Umständen fordert mein Prog eine Benutzereingabe an. Zuvor gibt es eine Meldung aus, warum es eine Eingabe benötigt und welche Art von Eingabe es erwartet. Alles funktioniert gut, wenn der Benutzer das Prog nicht mit einer Pipe startet. Wenn der Benutzer dies tut, wird die Nachricht nicht gedruckt, da stdout gepuffert und an die Pipe weitergeleitet wird. Der Benutzer wird nur eine Aufforderung sehen, aber er weiß nicht warum und was er jetzt tun soll. Meine Idee war, die Pipe auszusetzen, die Nachricht auszudrucken, die Benutzereingabe zu erhalten und dann die Pipe wieder aufzunehmen. –