vielleicht ist mein Problem ja irre trivial, aber ich kriege es nicht
gebacken:
Ich moechte aus einem Programm (unter Kontrolle dieses Programms
heraus) einen Batch.bat zeilenweise abarbeiten.
z.B.:
return_wert = system (string_zeile)
Das funktioniert auch soweit ganz gut.
Nun moechte ich aber in einem Fehlerfall die Dos-Fehlermeldungen in
einem anderen String erhalten. (return_wert ist in dem Falle anstelle
0 immer 1, errno ist bereits wieder 0 )
Wenn z.B. in dem Batch.bat in der den Fehler ausloesenden string_zeile
steht
mkdir C:\TESTDIR
und das C:\Testdir ist schon vorhanden, dann erfolgt in dem
Command-Fenster die Fehlermeldung
Ein Unterverzeichnis oder eine Datei mit dem Namen "TESTDIR"
existiert bereits.
Diesen String moechte ich an mein Programm uebergeben bekommen und
dann selber in eine Art Logbuch-Datei eintragen koennen.
Wie komme ich an diesen String?
( Das haette fuer mich den Vorteil, dass ich den Stringtext gleich in
der
gerade gueltigen Landessprache erhalte und ihn in gleich mit
protokollieren koennte,
und ich nicht ueber Fehlernummern mir selber irgend einen Text für
alle Sprachen herausbasteln muss.
Vielen Dank im Voraus
Joerg
Direkt in einen String kannst du sowas nicht umleiten, wohl aber in
eine (temporaere) Datei.
Das geht am einfachsten von Seiten des aufrufenden C-Programms aus.
Es muss seinen 'stdout' und 'stderr' Kanal in eine Datei umleiten,
bevor die Batch-Datei aufgerufen wird. Es gibt auch fertige Utilities,
die sowas koennen, z.B. 'script.com' auf SimTel, oder das Programm
'redir', das beim Compilerpaket DJGPP dabei ist.
Mit reinen DOS-Mitteln geht es auch. Wahlweise per Startparameter
eines explizit gestarteten Command.com (also system("command.com /c
batch.bat"), statt einfach system("batch.bat"). Oder per Befehl 'ctty'
innerhalb der Batch-Datei.
--
Hans-Bernhard Broeker (bro...@physik.rwth-aachen.de)
Even if all the snow were burnt, ashes would remain.