stdout umbiegen/wiederherstellen
-
Hi,
ich hab folgendes Problem: Ein Konsolenprogramm (ein cgi für Apache) ruft eine externe Lib auf. Diese Lib verhält sich aber nicht sehr nett und gibt 2 Zeilen auf stdout mittels printf aus. Das möchte ich verhindern, weil sich diese beiden Zeilen absolut nicht mit XHTML vertragen.
Die beiden Zeilen sind immer die selben (Pfade zu 2 DLLs), daher hab ich folgenden Ansatz:freopen("dummy.txt", "w", stdout); /* ... Am Ende des Programms: */ /* dummy.txt öffnen und die beiden unerwünschten Zeilen rausfiltern */ /* Danach ausgeben */
Das Ausgeben am Schluss ist das Problem. Durch freopen wird stdout geschlossen, d.h. der ganze Ansatz ist eigentlich sinnlos.
Wie kann ich stdout umbiegen, sodass entweder die externe Lib gar nichts mehr ausgeben kann oder dass alle Ausgaben zum späteren Filtern gespeichert werden?
-
ich koennte dir ne unix variante sagen, weiss aber nicht, ob
dir das wirklich weiterhilft:int fd = open( "irgendwo.txt", ...); /* Das umlenken der ausgabe: * alle ausgaben auf stdout werden nun in die Datei geschrieben */ dup2( fd, 1 ); /* 1 = filedescriptor stdout */ printf( "Hallo Welt" ); /* wird in die Datei geschrieben */ close( fd );
-
Danke, mit dup2 hast du mich auf die richtige Spur gebracht:
FILE* my_stdout = _fdopen(_dup(1), "a"); freopen("dummy.txt", "wb", stdout); /* ... */ fclose(stdout); FILE* Result = fopen("dummy.txt", "rb"); char Buffer[1024]; while(!feof(Result)) { memset(Buffer, 0, 1024); fread(Buffer, 1, 1023, Result); fprintf(Buffer); }
Ist vielleicht nicht alles Standard-C, aber es funktioniert mit Apache.