出力がNSPIPEオブジェクトにリダイレクトされると、アプリケーションの動作が異なりますか?
-
01-10-2019 - |
質問
ソケットで動作し、データを読み取り /書き込むアプリケーションがあります。それは使用しています 財団 組み合わせたフレームワーク cfnetwork と stdio.
問題は次のとおりです。コンソール(Bash Shell)から起動すると、100%うまく機能し、何も問題ありません。ただし、NSTASK Madnessを介して別のアプリケーションによって呼び出されると、開始されます。アプリケーション全体が非常識になり、ソケットを一度だけ読み取り、その後電話を切ることができます(終了後に終了することを目的としています)。
このアプリケーションは、環境変数やそのようなものに依存していません。ユーザーの問題でもありません。起動すると、サーバーに簡単なリクエストを送信し、printf応答であり、再び読みます。これは、終了パケットが受信されるまで発生します。
私は本当に混乱しており、フレームワークの中に何かがあり、プログラマーを怒らせるためだけにアプリを狂気にするものがあるように感じます。
ちなみに、私はオンです Mac OS X Snow Leopard アプリケーションは同じプラットフォーム用です。
編集1: リダイレクト stdout に nspipe それを引き起こします。しかし、なぜ ?
解決
libc
パイプ/ファイルと(擬似)端子に接続されたコンソールを異なる方法で処理します。特に、デフォルトのバッファリングポリシーは異なります。広範な議論を参照してください このスタックオーバーフローQ&A.
したがって、(擬似)端子に接続されたときに機能するプログラムがパイプで動作しないことは完全に考えられます。もっと具体的なアドバイスが必要な場合は、コード(少なくともスケルトン)を投稿する必要があります。