Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> epollは、詳細な使用しています

epollは、詳細な使用しています

  
 作品

のepollを使用すると、操作をIOにしたい場合は、Xianxiangのファイルディスクリプタを再度、あなた、読んだり、読み出しまたは書き込み可能な状態では、ファイルディスクリプタはイベントがepoll_wait機能でお知らせします場合は、書き込みをするかどうかを問い合わせることですさらにRECVまたは操作を送信します。

のepoll自体は任意のIO読み取りおよび書き込み操作を行わないだけで、非同期イベント通知メカニズム、である、あなたが読み取り操作または書き込み、および特定の読み取りや書き込みができないことを伝えるためにのみ責任があるが、また、独自のアプリケーション層を作ります。のみ、このようなメカニズムを提供するのepollは、それが使用のepollをより柔軟になって、イベント通知やIO操作の間の相互独立性を維持し、また非常に良いです。

使用されるデータ構造の組合のtypedef:

は、使用される関数とデータ構造の以下の簡単な説明、のヘッダファイルsys /epoll.hで宣言されたすべての関数のepoll使用されていますepoll_data {void *型PTR; int型のfd; __のuint32_tのU32; __ uint64_tをのU64;} epoll_data_t;

のstruct epoll_eventは{__uint32_tイベント; /*のepollイベント* /epoll_data_tデータ; /*ユーザデータ変数* /};構造epoll_eventはは、サーバーに接続し、クライアントとして、イベントをトリガするファイルディスクリプタ関連するデータを保存するために興味のあるイベントに登録して発生し、処理すべきイベントを返し、

コモンウェルスepoll_dataされています、サーバは、得ることができ、これらは、読み取りのファイルディスクリプタfdのepoll_dataフィールドに割り当てることができ、後で

受け入れる関数を呼び出すことにより、ファイル記述子にこのクライアントソケットのファイルディスクリプタに対応するための操作を書きます* PTR:アプリケーション層のデータポインタptrを実施することにより、イベントの到着の通知が、それはまた

epoll_eventはによって運営されてインシデントデータを伝える一方で、イベントの種類は、何が起こったのかを説明しますだけでなく、イベントフィールドの構造は、関心のあるイベントであり、イベントは可能な値としてトリガされます。

EPOLLIN:対応するファイルディスクリプタを読み取ることができることを示している。EPOLLOUT:対応するファイルディスクリプタを書き込むことができることを示しています。 EPOLLPRI:(データ到着をバンドべき本明細書に表される)対応するファイル記述子緊急可読データことを示し、EPOLLERRは:対応するファイル記述子エラーことを示し、EPOLLHUPは:対応するファイル記述子が削除されることを示す。EPOLLET。これは、対応するファイル記述子イベントが発生したことを示し、機能

が使用されている:1、epoll_create関数宣言機能:INT epoll_create(INTサイズ)この関数は、パラメータが指定される専用ファイル記述子ファイルディスクリプタを生成しますファイルディスクリプタに機能イベントを制御するためのINT epoll_ctl(INT epfdに存在、int型のOP、INT FD、構造体epoll_eventは*イベント):記述子最大範囲

2、epoll_ctl関数宣言関数を生成しますあなたは、イベントを削除し、イベントを登録するイベントを変更することができます。パラメータ:epfdに存在:epoll_create epollファイルディスクリプタによって生成された専用; OP:そのようなイベントの登録として実行される処理、可能な値EPOLL_CTL_ADD登録、EPOLL_CTL_MOD変更、EPOLL_CTL_DELはFDを削除します関連するファイル記述子、イベント:点epoll_eventはポインタ; 0 -13成功、不成功を返した場合、イベントがepoll_wait機能
は、

関数の宣言を返します:Iポーリングのためにint型のイベントがepoll_wait(int型epfdに存在、構造体epoll_eventは*イベント、maxevents個のint型、int型のタイムアウト)機能を/イベントの発生O;パラメータ:epfdに存在:epoll_createファイルディスクリプタ専用ファイル記述子によって生成される。epoll_eventは:リターン通路アレイ処理イベント; maxevents個のイベント:扱うことができるあたりのイベントの数、タイムアウト:I /Oイベントを待っていますタイムアウト値は、イベントの数を返します。 Linuxのネットワークプログラミングで
は、



、selectイベントを使用して行うには非常に長い時間がトリガされます。新しいLinuxカーネルでは、代替メカニズムがepollをされています。選択するために比較すると、ファイルディスクリプタの最大の利点は、リスナーfdの数として増加し、効率を低下させないということです。ポーリング処理され、カーネルに実装を選択しているので、ポーリングはより多くの、より多くの時間がかかり、自然をfdが。そして、Linuxでは/posix_types.hヘッダには、このような宣言を提出します。#define __FD_SETSIZE 1024は同時に、1024 FDを監視するために、もちろん、我々はヘッダファイルを変更することで、この数を拡大して、カーネルを再コンパイルすることができますまで選択表し、これは治療していないようです。

のepollインタフェースは、次の3つの機能:. 1つのint epoll_create(int型のサイズ)の合計で、非常に簡単です。ファイルディスクリプタへのハンドルを作成するために、リスナーの数の大きさはどのくらいの合計のカーネルを指示します。このパラメータは、()の最初のパラメータは、リスニングFD + 1の最大値を与える別の選択です。 、ファイルディスクリプタそれはFDの値を取ることであるハンドル作成したときは、Linuxの/proc /プロセスID /FD /を見れば、そのファイルディスクリプタを使用した後、FDを見ることができ、ことにする必要がありますクローズクローズ()を呼び出し、それがFD枯渇する恐れがあります。

2のint epoll_ctl(選択は異なっている(int型epfdに存在、int型オペアンプ、int型のfd、構造体epoll_eventは*イベント);.のepollイベント登録機能、)あなたが聴きたいイベントの種類をリスナーにカーネルに伝えるためにイベントが、ここで聞くためにイベントタイプを登録します。最初のパラメータは、3つのマクロで表される第2引数そのアクションのepoll_create()の戻り値は次のとおりです。EPOLL_CTL_ADDは:epfdに存在するFD新しい登録; EPOLL_CTL_MOD:変更はイベントFDのリスナーに登録されている。EPOLL_CTL_DEL:からepfdに存在がFDを削除し、次のように3番目の引数は、FDを監視する必要があり、四番目のパラメータは、カーネルが何に耳を傾ける必要が伝える、構造体epoll_eventは構造は次のとおりです。

組合epoll_dataのtypedef {void *型PTR; int型のfd; __uint32_t U32; __ uint64_tをのU64;} epoll_data_t;

構造体epoll_eventは{__uint32_tイベント; /*ファイルディスクリプタのイベント* /epoll_data_tデータ; /*ユーザデータ変数* /};

のイベントは以下であってもよいですマクロコレクション:EPOLLIN:(ノーマルクローズピアソケットを含む)は、対応するファイル記述子を読み取ることができることを示し、EPOLLOUTは:対応するファイル記述子を書き込むことができることを示している。EPOLLPRI:(対応するファイル記述子緊急可読データていることを示しIT)バンドデータ到着を表現しなければならない; EPOLLERRは:対応するファイル記述子エラーことを示し、EPOLLHUP:対応するファイル記述子が削除されることを示す。EPOLLET。エッジトリガのファイルディスクリプタのセットのトリガレベル(レベルトリガ)に対して相対的であるモードを、(エッジトリガ)。 EPOLLONESHOT:聞いて、それはこのソケットに耳を傾け続けるために必要がある場合は、この事件を聞いて終わっ唯一の事件は、その後、再びこのソケットのepollキュー

3 int型のイベントがepoll_wait(int型epfdに存在、構造体epoll_eventはに追加する必要があります。 *イベント、int型maxevents個、int型のタイムアウト);イベントを待つには、()の呼び出しを選択するように似て生成されます。イベントは、maxevents個のイベントはepoll_create(サイズ、タイムアウトパラメータ)直ちに、0を返し、タイムアウト(ミリ秒-1で作成した値よりも大きくない方法カーネル広告maxevents個のイベント、カーネルからのイベントのセットを得るために使用されるパラメータイベント必ず、主張もある)恒久的にブロックされると述べました。この機能は、0のリターンとして対処する必要があるイベントの数がタイムアウトことを示して返します。

Copyright © Windowsの知識 All Rights Reserved