Pregunta

Tengo una aplicación que funciona con tomas y lee / escribe datos. Utiliza Fundación marco combinado con CFNetwork y stdio .

Aquí está el problema - cuando es lanzado desde la consola (shell bash) que funciona al 100% bien y no hay nada malo con. Sin embargo cuando se invoca por otra aplicación a través de la locura comienza NSTask. toda la aplicación se vuelve loco y sólo se lee la toma de una vez y luego cuelga (que está destinado a la salida después de que se hace).

Esta aplicación no se basa en variables ambientales o cualquier otro tipo de cosas. No es un problema de usuario bien. Cuando se puso en marcha envía una petición al servidor y ' printf Es la respuesta y lee de nuevo. Esto sucede paquete una terminación hasta el que se reciba.

Estoy muy confundido, y se siente como que hay algo dentro del marco que hace que los locos aplicación sólo para mear fuera el programador.

Por cierto, estoy en Mac OS X Snow Leopard y la aplicación es para la misma plataforma.

EDIT 1: de redireccionamiento stdout para un NSPipe es su causa. Pero ¿por qué?

¿Fue útil?

Solución

golosinas libc un tubo / archivo y una consola conectada a un (pseudo) terminal de manera diferente. En particular, la política de almacenamiento en memoria intermedia es diferente. Vea la extensa discusión en este desbordamiento de la pila Q y A .

Por lo tanto, es perfectamente concebible que un programa que funciona cuando está conectado a un (pseudo) terminal no funcionará con un tubo. Si necesita información más específica, es necesario post (al menos el esqueleto de) su código.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top