In unserem C++ - Projekt unter MacOS X, verwenden wir stdio für die Interaktion mit Clients. Die von uns verwendete Dylib verwendet jedoch auch stdio, um "offene Protokolldateien" zu drucken. Dadurch wird die gesamte Kommunikation zwischen unseren Kunden und der Anwendung unterbrochen. Ich habe mir die Beispiele angesehen, wie man stdio in eine Datei umleitet oder stdio vorübergehend deaktiviert. Aber wir konnten es nicht schaffen.C++ Redirect oder deaktivieren Sie stdio vorübergehend
Also, wie können wir stdio während der Interaktion mit der Dylib vorübergehend deaktivieren oder umleiten.
Danke selbeerk, wir haben die Lösung ausprobiert. Uns ist aufgefallen, dass beim ersten Ausführen des Codes der Text "Protokolldateien öffnen" von der Konsole verschwindet. Aber das nächste Mal bleibt es und stürzt die Kommunikation mit der Client-App ab. Ich denke, Ihr Ansatz behandelt alle drei Fälle von stdio-Nutzung; also habe ich erwartet, dass es funktionieren würde. – barbarossa
Wenn ich 'close (STDOUT_FILENO);' oder 'fclose (stdout);' schreibe, wird der Protokolltext nie gedruckt. Gibt es eine Möglichkeit, stdout danach wiederherzustellen? – barbarossa
'dup2' selbst schließt das STDOUT_FILENO innerhalb der Redirect-Funktion. Verschachteln Sie den gesamten Aufruf von dylib unter 'Redirect' und' Restore' richtig? – sameerkn