1

我有一个与套接字一起使用并读取/写入数据的应用程序。它使用Foundation框架结合CFNetworkstdio

这是问题 - 当它从控制台(bash shell)启动时,它可以 100% 正常工作,并且没有任何问题。然而,当它被另一个应用程序通过 NSTask 调用时,疯狂开始了。整个应用程序变得疯狂,它只读取一次套接字然后挂断(它意味着在完成后退出)。

此应用程序不依赖环境变量或任何其他类似的东西。这也不是用户问题。当它启动时,它向服务器发送一个简单的请求,' printf '作为响应并再次读取。这会一直发生,直到接收到终止数据包。

我真的很困惑,感觉框架内有一些东西让应用程序变得疯狂,只是为了惹恼程序员。

顺便说一句,我在Mac OS X Snow Leopard上,该应用程序适用于同一平台。

编辑 1:将标准输出重定向到NSPipe会导致它。但为什么 ?

4

1 回答 1

0

libc以不同的方式对待连接到(伪)终端的管道/文件和控制台。特别是,默认的缓冲策略是不同的。请参阅此 Stack Overflow Q&A 中的广泛讨论。

因此,完全可以想象,一个在连接到(伪)终端时工作的程序不能与管道一起工作。如果您需要更具体的建议,您需要发布(至少是框架)您的代码。

于 2010-08-28T01:34:42.257 回答