2013-04-06 5 views
11

NSFileHandleのreadabilityHandlerを使用してEnd-of-Fileをチェックする方法は?私は<code>readabilityHandler</code>ブロックを使用して(<code>NSPipe</code>から)<code>NSFileHandle</code>からデータを読んでいます

fileHandle.readabilityHandler = ^(NSFileHandle *handle) { 
    [self processData: [handle availableData]]; 
} 

これは正常に動作し、私は私が私のprocessData方法に供給された期待するすべてのデータを取得します。問題は、データの最後の部分がいつ読み取られたかを知る必要があることです。 availableDataは、ファイルの終端に達した場合に空のNSDataインスタンスを返す必要がありますが、EOFで到達可能ハンドラが再度呼び出されないという問題があります。

EOFで何らかの通知やコールバックを取得する方法については何も見つかりません。それで私は何が欠けているのですか?アップルはEOFコールバックなしで非同期リーディングAPIを提供していますか?

ところで、runloopを利用することはできません。readInBackgroundAndNotifyメソッドは使用できません。これをNSFileHandle APIで動作させることができない場合は、IOを行うためにディスパッチソースを直接使用することになります。

+0

を使用してロール独自の実装は、すべてのパイプの端部が閉鎖されている書きますか?実行ループに関しては、すべてのスレッドがオンデマンドで実行ループを作成し、自分で実行ループを実行できます。 –

+0

はい、パイプが正しく閉じられています。私はもう少し実験を行い、他の種類の 'NSFileHandle'インスタンスでも同じことが起こりました。標準入力または通常のファイルから読み込む場合、EOFの通知もありません。 – Sven

答えて

1

readInBackgroundAndNotifyを使用できない場合は、NSFileHandleでこれを行うことは幸いです。私が見

2種類の溶液:

  1. は実行ループを作成し、readInBackgroundAndNotifyを使用しています。
  2. dispatch_io_*
関連する問題

 関連する問題