1

ソケットで動作し、データの読み取り/書き込みを行うアプリケーションがあります。CFNetworkおよびstdioと組み合わせたFoundationフレームワークを使用します。

ここに問題があります-コンソール(bashシェル)から起動すると、100%正常に動作し、問題はありません。ただし、NSTaskを介して別のアプリケーションによって呼び出されると、狂気が始まります。アプリケーション全体が異常になり、ソケットを1回だけ読み取ってから、電話を切ります(完了後に終了することを意味します)。

このアプリケーションは、環境変数などに依存していません。ユーザーの問題でもありません。起動すると、サーバーに単純な要求を送信し、「printf」が応答を送信して再度読み取ります。これは、終了パケットが受信されるまで発生します。

私は本当に混乱していて、フレームワークの中に何かがあり、プログラマーを怒らせるためだけにアプリを狂わせているように感じます。

ちなみに、私はMac OS X Snow Leopardを使用しており、アプリケーションは同じプラットフォーム用です。

編集1: stdoutNSPipeにリダイレクトと発生します。しかし、なぜ ?

4

1 に答える 1

0

libc(疑似)端末に接続されたパイプ/ファイルとコンソールの扱いが異なります。特に、デフォルトのバッファリングポリシーは異なります。このStackOverflowQ&Aの詳細な説明を参照してください。

したがって、(疑似)端末に接続されたときに動作するプログラムがパイプで動作しないことは完全に考えられます。より具体的なアドバイスが必要な場合は、コード(少なくともスケルトン)を投稿する必要があります。

于 2010-08-28T01:34:42.257 に答える