Mailinglist Archive: opensuse-programming-de (124 mails)

< Previous Next >
Re: stdio von einem per system() gestartetem Prozess
  • From: Michael Matz <matz@xxxxxxx>
  • Date: Fri, 16 Aug 2002 17:42:37 +0200 (CEST)
  • Message-id: <Pine.LNX.4.33.0208161734420.13269-100000@xxxxxxxxxxxxx>
Hi,

On 16 Aug 2002, Volker Kroll wrote:

Ich habe es jetzt so gemacht. Nach meinem Verstaendnis muesste das korrekt
sein.
Leider scheint das Schreiben nicht zu funktionieren.

int cachePW() {
FILE * commandin;
char c[124];
char * command = c;
sprintf(c, "prog -username %se >out 2>&1",uid);
commandin = popen(command, "w");
fputs(pw, commandin);
fputs(pw, commandin);

return 0;
}

Keine Ahnung was ich falsch machen. Spannenderweise kommt die Aufforderung
"Password: " auch immer noch auf dem Terminal an und nicht in der Datei out.

Das bedeutet dann mit grosser Wahrscheinlichkeit, dass das Programm direkt
/dev/tty abfragt, und nicht stdin (z.B. um echoing auszuschalten). Die
getpass() Funktion macht das z.B. von Haus aus. Wenn du sowas machen
willst (also direkt ans Terminal schreiben), musst du selber ein
pseudo-tty erstellen und mit stdin verbinden. expect(1) tut sowas (schau
dir die Funktion send_tty an), und IIRC gibt es auch perl-Module, die das
koennen. Es selber in C zu programmieren ist hoechst untrivial.


Ciao,
Micha.


< Previous Next >
Follow Ups
References