11
fileHandle.readabilityHandler = ^(NSFileHandle *handle) {
[self processData: [handle availableData]];
}
これは正常に動作し、私は私が私のprocessData
方法に供給された期待するすべてのデータを取得します。問題は、データの最後の部分がいつ読み取られたかを知る必要があることです。 availableData
は、ファイルの終端に達した場合に空のNSData
インスタンスを返す必要がありますが、EOFで到達可能ハンドラが再度呼び出されないという問題があります。
EOFで何らかの通知やコールバックを取得する方法については何も見つかりません。それで私は何が欠けているのですか?アップルはEOFコールバックなしで非同期リーディングAPIを提供していますか?
ところで、runloopを利用することはできません。readInBackgroundAndNotify
メソッドは使用できません。これをNSFileHandle
APIで動作させることができない場合は、IOを行うためにディスパッチソースを直接使用することになります。
を使用してロール独自の実装は、すべてのパイプの端部が閉鎖されている書きますか?実行ループに関しては、すべてのスレッドがオンデマンドで実行ループを作成し、自分で実行ループを実行できます。 –
はい、パイプが正しく閉じられています。私はもう少し実験を行い、他の種類の 'NSFileHandle'インスタンスでも同じことが起こりました。標準入力または通常のファイルから読み込む場合、EOFの通知もありません。 – Sven