当输出重定向到NSPIPE对象时,应用程序的行为不同吗?
-
01-10-2019 - |
题
我有一个适用于插座的应用程序,并读取 /写入数据。它用 基础 框架合并 cfnetwork 和 斯蒂奥.
这是问题 - 当它从控制台(bash shell)启动时,它可以效果100%罚款,没有错。但是,当通过NSTASK MADNESS通过另一个应用程序调用它时。整个应用程序变得疯狂,仅读取插座,然后挂起来(完成后将退出)。
该应用程序不依赖环境变量或任何其他类似的东西。这也不是用户问题。启动时,它将向服务器发送简单的请求,并'printf响应并再次阅读。直到收到终止数据包,这种情况就会发生。
我真的很困惑,感觉就像框架内部有些东西使应用程序发疯只是为了惹恼程序员。
顺便说一句,我在 Mac OS X雪豹 该应用程序适用于同一平台。
编辑1: 重定向 Stdout 到一个 nspipe 引起它。但为什么 ?
解决方案
libc
以不同的方式处理管道/文件和连接到(伪)端子的控制台。特别是,默认缓冲策略是不同的。参见广泛的讨论 在此堆栈溢出问答中.
因此,完全可以想象的是,连接到(伪)终端的程序无法与管道使用。如果您需要更具体的建议,则需要(至少在骨架上)您的代码。
不隶属于 StackOverflow