TEDIA会員に登録したメールアドレスとパスワードを入力してください

メールアドレス:

     パスワード:


パスワードを忘れた方はパスワードの確認を行ってください。

TEDIA会員へのご登録がお済みで無い方はこちらで登録ができます


>> テクノロジーポータル TEDIA トップページへ戻る <<

Think IT Software Developer's Think IT Find-IT 失敗しないソフト選び Find-IT TEDIA テクノロジーポータル TEDIA インストールマニアックス2008 インストールマニアックス2008

TEDIA SponsorsOpen Source Web Development Tutorials - Dev Shed

Linuxファイルとイベントポーリングインターフェース
(2009/03/10公開)

Epollでイベント待機

 epoll_wait()システムコールは、epollインスタンスと関連付いたファイル記述子のイベントを待機します。


  #include <sys/epoll.h>
  int epoll_wait (int epfd, 
                 struct epoll_event *events,
                 int maxevents,
                 int timeout); 



 epoll_wait()のコールは、最長timeoutミリ秒まで、epollインスタンスepfdに関連付いたファイルのイベントを待機します。成功すると、最多maxeventsイベントまで、各イベントを記述するepoll_event構造を含むメモリーをeventsが指摘します。戻り値はイベント数です。エラーの場合は-1が戻り、errnoが以下のいずれかを示します。

EBADF
epfdが有効なファイル記述子ではありません。

EFAULT
eventsが指摘したメモリーへの書き込みアクセス権がありません。

EINTR
信号によって中断されたため、システムコールを完了できませんでした。

EINVAL
epfdが有効なepollインスタンスではありません。あるいは、maxeventsがゼロ以下です。

 timeoutがゼロの場合は、たとえ入手できるイベントがなくても、直ちにコールがゼロを戻します。Timeoutが-1の場合は、イベントが入手できるまで、コールは戻りません。

 コールが戻ると、epoll_event構造のeventsフィールドが発生したイベントを記述します。Dataフィールドには、内容にかかわらず、epoll_ctl()を呼び出す前にユーザーが設定した内容が入っています。

 epoll_wait()例の全体は、以下のようになります。


  #define MAX_EVENTS   64 
  struct epoll_event *events;
  int nr_events, i, epfd; 
  events = malloc (sizeof (struct epoll_event) * MAX_EVENTS);
  if (!events) {
          perror ("malloc");
          return 1; 
  } 
  nr_events = epoll_wait (epfd, events, MAX_EVENTS, -1);
  if (nr_events < 0) { 
          perror ("epoll_wait");
          free (events);
          return 1;
  } 
  for (i = 0; i < nr_events; i++) {
          printf ("event=%ld on fd=%d\n",
          events[i].events,
          events[i].data.fd);
          /*
           * We now can, per events[i].events, operate on 
           * events[i].data.fd without blocking. 
           */
  } 
  free (events); 




前のページ     1    2    3    4    次のページ

Copyright © 2008 Ziff Davis Enterprise, Inc.
Originally appearing in the U.S. Edition of Dev Shed. All Rights Reserved.