問題タブ [kqueue]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Linux mint debian で Kqueue を使用しようとしています
コードをコンパイルするときに、c でイベント指向サーバーを実行するために kqueue を使用しようとすると、このエラーが発生します
致命的なエラー: sys/event.h: そのようなファイルまたはディレクトリはありません
ファイルに含める必要があるkqueueイベントを作成するために私がフォローしているチュートリアルによると、Cでのイベントプログラミングは初めてです
objective-c - FSEvents API と kqueue により、実際のメモリが急速に増加し、アプリがハングアップする
フォルダの変更を監視したい。FSEventsまたはkqueueも使用できますが、問題は、大量のJPG画像(100枚の写真でテスト)を含むフォルダーを監視すると、メモリが非常に速く増加することです(小さなアプリの場合は2GB以上)。Instruments でプロファイリングすると、多くの ImageIO が割り当てられていることがわかります。
これがInstrumentsのスクリーンショットです。
ここで ImageIO が大量に割り当てられた理由がわかりません。
ここからkqueueチュートリアルを入手しました: http://www.davidhamrick.com/2011/10/09/kqueue-in-cocoa.html
経験、ガイド、または提案をいただければ幸いです。
macos - ファイル記述子を指定して POSIX/OS X でファイル サイズを決定する信頼できる方法
タイムアウトを含む特定のサイズに成長するファイル (fd を指定) を監視する関数を作成しました。kqueue()/を使用kevent()してファイルが「拡張」されるのを待ちますが、ファイルが大きくなったという通知を受け取った後、ファイルサイズを確認する必要があります (そして、それを目的のサイズと比較します)。それは簡単に思えますが、POSIXで確実に行う方法がわかりません。
注意: 指定された時間内にファイルがまったく拡張されない場合、タイムアウトが発生します。そのため、これは絶対的なタイムアウトではなく、ファイルのサイズが大きくなるタイムアウトです。kevent()私はOS Xを使用していますが、この質問は「 /を持つすべてのPOSIX」を対象kqueue()としています。これは、OS Xと私が考えるBSDである必要があります。
私の関数の現在のバージョンは次のとおりです。
したがって、基本的なアルゴリズムは次のように機能します。
- ケイベントをセットアップする
- サイズを確認
- ファイルの増大を待つ
ファイルが目的のサイズに達するまで、手順 2 と 3 が繰り返されます。
コードは、「何らかのエラーが発生したか、ファイルが必要以上に大きい」、「ファイルがまだ十分に大きくない」、またはファイルが必要なサイズに達した場合int evaluate_fd_size(int fd, off_t wanted_size)に返す関数を使用します。< 0== 0> 0
明らかに、これevaluate_fd_sizeはファイル サイズの決定において信頼できる場合にのみ機能します。私の最初の試みは、それを で実装してoff_t eof_pos = lseek(fd, 0, SEEK_END)比較するeof_posことでしたwanted_size。残念ながら、lseek結果をキャッシュしているようです。keventで返してもNOTE_EXTEND、ファイルが大きくなったので、結果は同じかもしれません!次に、に切り替えようと思ったのですfstatが、キャッシュもある記事を見つけましfstatた。
私が最後に試したのはfsync(fd);以前の使用でしたがoff_t eof_pos = lseek(fd, 0, SEEK_END);、突然機能し始めました。しかし:
fsync()私の問題を本当に解決するものは何もありませんfsync()パフォーマンスのためにしたくない
編集: 再現するのは本当に難しいですが、fsync()役に立たないケースが 1 つあります。NOTE_EXTENDイベントがユーザー空間にヒットした後、ファイル サイズが大きくなるまで (ごくわずか) 時間がかかるようです。fsync()おそらく十分sleep()に機能するため、ほとんどの場合機能します:-。
言い換えれば、ファイル名がわからないためにできないファイルを開いたり閉じたりせずに、POSIXでファイルサイズを確実にチェックする方法。さらに、これが役立つという保証を見つけることができません
ちなみに、int new_fd = dup(fd); off_t eof_pos = lseek(new_fd, 0, SEEK_END); close(new_fd);キャッシングの問題は解決していません。
EDIT 2 :オールインワンのデモ プログラムも作成しました。終了する前に印刷された場合Ok, success、すべてがうまくいきました。ただし、通常Timeout (10000000)は競合状態を示す出力が表示されます。最後にトリガーされた kevent のファイル サイズ チェックは、現時点での実際のファイル サイズよりも小さくなっています。奇妙なことに、 を使用ftruncate()してファイルを拡大するのではなく、write()動作しているように見えます (テスト プログラムをコンパイルしてテストすることができます-DUSE_FTRUNCATE)。
freebsd - ファイルの追加/変更/削除についてディレクトリを再帰的に監視する
いくつかのサブディレクトリを含むディレクトリを監視する必要があります。各サブディレクトリには、ファイルの追加、変更、および削除を監視する必要があるファイルがあります。
いくつかのサンプルコードを見つけて、それを機能させるために少し変更する必要がありましたが、必要なことを正確に実行することはできません. ファイルの名前変更、またはディレクトリ内の削除 (サブディレクトリではない) を見つけることができますが、ファイルの変更には応答しません。
Google 検索を使用して見つける方法は、各ファイルを個別に監視することです。ただし、監視するファイルが数十万あり、それぞれにファイル記述子を保持することはおそらく賢明ではありません。
FreeBSD で必要なことを行う方法はありますか? または、別の解決策を見つける必要がありますか?
sockets - ソケットを閉じるときに fd を epoll/kqueue から登録解除する必要がありますか?
ソケットを閉じると、その fd が epoll や kqueue から自動的にパージされるというのは本当ですか?
もしそうなら、fdを閉じるときに手動でfdを登録解除する必要がないということですか?
実際に私はトルネードを使用していますが、それに関するアドバイスもいただければ幸いです。
python - ioctl を正しく使用していますか?
この種のことを行う方法を学ぶためだけに、python3.3 で http サーバーを作成しています。fcntl.ioctlリクエストを解析する関数で、ソケットで読み取ることができるバイト数を取得するために使用したいのですが、これを行うのは、kqueue をチェックした結果、読み取るものがあることを示す kevent が表示された場合のみです。ソケットに。しかし、 を呼び出そうとするとfcntl.ioctl、 が表示されますOSError: [Errno 14] Bad address。私は何を間違っていますか?また、これは最初の呼び出しで発生しているようです。関連するコードは次のとおりです。
c - kevent はいつ、どこでエラーを返す可能性がありますか?
EV_RECEIPT変更リスト (またはセット) に無効な項目があると、フラグが設定されkeventた結果が返されます。EV_ERRORそのフラグの結果となる他の条件は何ですか?
EV_RECEIPTGoogle で検索すると、サポートは「エラー状態の明確化」に関連していることがわかります。このエッジケースがいつ適用されるのだろうか。
実際のイベントの前に、変更リストからのエラーがイベント リストに最初に表示されると想定しても安全ですか?
ソケットに関連するフィルターのみを検討するとどうなるでしょうか?