Question

J'ai une application qui fonctionne avec les sockets et lecture / écriture des données. Il utilise Fondation cadre combiné avec CFNetwork et stdio .

Voici la question - quand il est lancé depuis la console (shell bash) il fonctionne à 100% fin et il n'y a rien de mal avec de. Cependant, quand elle est invoquée par une autre application via NSTask la folie commence. L'ensemble de l'application devient fou et il ne lit que la prise une fois, puis raccroche (il est destiné à la sortie après avoir été fait).

Cette application ne repose pas sur les variables environnementales ou toutes autres choses comme ça. Il n'est pas un problème de l'utilisateur soit. Quand il est lancé, il envoie une simple demande au serveur et ' printf est la réponse et relit. Cela se produit jusqu'à ce paquet une terminaison est reçu.

Je suis vraiment confus, et il se sent comme il y a quelque chose à l'intérieur du cadre qui rend les fous app juste pour pisser le programmeur off.

Par ailleurs, je suis sur Mac OS X Snow Leopard et l'application est de la même plate-forme.

EDIT 1: Rediriger stdout NSPipe provoque. Mais pourquoi?

Était-ce utile?

La solution

libc traite un tuyau / fichier et d'une console connectée à une borne différente (pseudo). En particulier, la politique de mise en mémoire tampon par défaut est différent. Voir la discussion approfondie dans ce débordement de la pile Q & A .

Ainsi, il est parfaitement concevable qu'un programme qui fonctionne lorsqu'il est connecté à un terminal (pseudo) ne sera pas de travail avec un tuyau. Si vous avez besoin de conseils plus spécifiques, vous devez afficher (au moins le squelette) de votre code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top