Frage

Ich habe eine Anwendung, die mit Sockets arbeitet und liest / schreibt Daten. Es nutzt Foundation Rahmen, kombiniert mit CFNetwork und stdio .

Hier ist das Problem - wenn es von der Konsole (Bash-Shell) gestartet wird, es funktioniert 100% in Ordnung und es ist nichts falsch mit. Allerdings, wenn es von einer anderen Anwendung aufgerufen wird, über NSTask Wahnsinn beginnt. Die gesamte Anwendung geht verrückt und es liest nur die Buchse einmal und dann auflegt (es Ausfahrt gemeint ist, nachdem es fertig ist).

Diese Anwendung beruht nicht auf Umgebungsvariablen oder andere solche Dinge. Es ist kein entweder Benutzer Problem. Wenn es gestartet wird, sendet er eine einfache Anfrage an den Server und ' printf ist die Antwort und wieder liest. Dies geschieht, bis ein Abschlusspaket empfangen ist.

Ich bin wirklich verwirrt, und es fühlt sich an wie etwas im Inneren des Rahmens ist, die nur die App verrückt macht aus dem Programmierer pissen.

By the way, ich bin auf Mac OS X Snow Leopard und die Anwendung ist für die gleiche Plattform.

EDIT 1: Umleiten von stdout zu einem NSPipe verursacht es. Aber warum?

War es hilfreich?

Lösung

libc behandelt eine Rohr / Datei und eine Konsole mit einem (pseudo) verbundenen Anschluss unterschiedlich. Insbesondere ist die Standardpufferpolitik anders. Sehen Sie sich die ausführliche Diskussion in diesem Stack-Überlauf Q & A .

So ist es durchaus denkbar, dass ein Programm, das bei Anschluss verfügt über einen (Pseudo-) Terminal funktioniert nicht mit einem Rohr. Wenn Sie mehr spezifische Beratung benötigen, müssen Sie Post (zumindest das Skelett) Code.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top