se comporta de aplicación diferente cuando la salida se redirige a un objeto NSPipe?
-
01-10-2019 - |
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é?
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.