2013-01-13 2 views
6

kqueue(OS X)は通常のファイルを読み書きするのに便利ですか?私はepollがではないことを知っています。はLinux上の通常のファイルに便利ですので、同じことがkqueueに当てはまるのでしょうか。Kqueue on regular files

編集:私はファイルの読み書きを意味するわけではありませんが、明らかにread()とwrite()はそのためのものです。私は、 "kqueueは実際にファイルが読み書き可能なときを検出するのに本当に役に立ちますか?

答えて

1

はい、kqueueは可読性のためにファイルを見るために使用できます。 manページから:

EVFILT_READ  Takes a file descriptor as the identifier, and returns 
        whenever there is data available to read. The behavior 
        of the filter is slightly different depending on the 
        descriptor type. 

[...] 

        Vnodes 
         Returns when the file pointer is not at the end of 
         file. data contains the offset from current posi- 
         tion to end of file, and may be negative. 

(「vノード」、この文脈では、通常のファイルです。)

通常のファイルは常に書き込み可能であるため、それは彼らにEVFILT_WRITEを適用しても意味がありません。

+0

通常のファイルが常に書き込み可能であることをどのように知っていますか? –

+0

ファイルは、ソケット、パイプ、その他のものと同じように、一時的に書き込めない(「満杯」から)ことはありません。 – duskwuff

+0

@ duskwuffいいえ、間違いなくブロックします。それらはアプリケーションの遅延/ハングアップを引き起こす可能性があります。これらのメカニズムを使用することの全ポイントは、これらのリソース上のイベントを通知し、これらのリソースにアクセスすることは、これらのイベントに関連してブロックされません。 「完全な」概念は無関係です。 – Rahly

1

カーネルキューは、私はdetect when when actions happen on a file(またはホットフォルダ内)に、過去にそれらを使用しました"allow you to intercept kernel-level events to receive notifications about changes to sockets, processes, the file system and other aspects of the system."

メカニズムです。私は彼らが "読み込み"と "書き込み"ファイルに使用できるとは思わない。 MacOSのネイティブ関数や通常のUN * Xスタイル "fopen"、 "fwrite"、 "fread"も使用できます。