Unix-system-calls-poll
[top]#
[[File:]]
[[File:]] |
|Web |This Site
- 初心者向けのUnix *
- Unix-ホーム
- Unix-はじめに
- Unix-ファイル管理
- Unix-ディレクトリ
- Unix-ファイル権限
- Unix-環境
- Unix-基本ユーティリティ
- Unix-パイプとフィルタ
- Unix-プロセス
- Unix-コミュニケーション
- Unix-The Vi Editor
- Unix Shellプログラミング*
- Unix-シェルとは?
- Unix-変数の使用
- Unix-特殊変数
- Unix-配列の使用
- Unix-基本的な演算子
- Unix-意思決定
- Unix-シェルループ
- Unix-ループ制御
- Unix-シェル置換
- Unix-引用メカニズム
- Unix-IOリダイレクト
- UNIX-シェル関数
- Unix-マンページヘルプ
- 高度なUnix *
- Unix-正規表現
- Unix-ファイルシステムの基本
- Unix-ユーザー管理
- Unix-システムパフォーマンス
- Unix-システムログ
- Unix-信号とトラップ
- Unixの便利なリファレンス*
- Unix-便利なコマンド
- Unix-クイックガイド
- Unix-組み込み関数
- Unix-システムコール
- Unix-コマンドリスト
- Unixの役立つリソース*
- Unix役立つリソース
選択した読書
- http://www.finddevguides.com/computer_glossary [コンピュータ用語集] *http://www.finddevguides.com/computer_whoiswho[Who is Who]
Copyright©2014 by finddevguides
Home | References | Discussion Forums | About TP |
poll()-Unix、Linuxシステムコール
[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]
広告
NAME
poll、ppoll-ファイル記述子で何らかのイベントを待つ
概要
#include <poll.h> int poll(struct pollfd* fds, nfds_t nfds, int timeout); #define _GNU_SOURCE #include <poll.h> int ppoll(struct pollfd *fds, nfds_t nfds, const struct timespec *timeout, const sigset_t *sigmask); |
説明
監視するファイル記述子のセットは、_fds_引数で指定されます。これは、次の形式の_nfds_構造体の配列です。
struct pollfd { int fd; /*file descriptor*/ short events; /*requested events*/ short revents; /*returned events*/ }; |
フィールド_fd_には、開いているファイルのファイル記述子が含まれています。
フィールド_events_は入力パラメーターであり、アプリケーションが関係するイベントを指定するビットマスクです。
フィールド_revents_は、実際に発生したイベントでカーネルによって満たされる出力パラメーターです。 _revents_で返されるビットには、_events_で指定されたビット、または値 POLLERR 、 POLLHUP 、または POLLNVAL のいずれかを含めることができます。 (これらの3ビットは_events_フィールドでは無意味であり、対応する条件が真であるときはいつでも_revents_フィールドに設定されます。)
要求されたイベントのいずれも(エラーも)ファイル記述子のいずれに対しても発生していない場合、 poll ()は、イベントの1つが発生するまでブロックします。
_timeout_引数は、 poll ()がブロックする時間の上限をミリ秒で指定します。 _timeout_に負の値を指定すると、タイムアウトが無限になります。
_events_および_revents_で設定/返される可能性のあるビットは、<poll.h>で定義されています。
Tag
説明
ポリン
読み取るデータがあります。
読み取る必要のある緊急データがあります(たとえば、TCPソケットの帯域外データ。パケットモードの擬似端末マスターは、スレーブで状態が変化しています)。
投票
今の書き込みはブロックしません。
ストリームソケットピアが接続を閉じたか、接続の半分を書き込んでシャットダウンしました。 この定義を取得するには、 _ GNU_SOURCE 機能テストマクロを定義する必要があります。
ポラー
エラー状態(出力のみ)。
ポーリング
ハングアップします(出力のみ)。
ポーリング
無効な要求:_fd_は開いていません(出力のみ)。
Tag
説明
優先順位バンドデータを読み取ることができます(Linuxでは通常使用されません)。
優先データが書き込まれる場合があります。
Linuxも認識していますが、 POLLMSG は使用しません。
ppoll()
_timeout_引数の違いを除いて、次の ppoll ()呼び出し:
ready = ppoll(&fds, nfds, timeout, &sigmask); |
以下の呼び出しを実行する_atomically_と同等です:
sigset_t origmask; sigprocmask(SIG_SETMASK, &sigmask, &origmask); ready = ppoll(&fds, nfds, timeout); sigprocmask(SIG_SETMASK, &origmask, NULL); |
_timeout_引数は、 ppoll ()がブロックする時間の上限を指定します。 この引数は、次の形式の構造体へのポインターです。
struct timespec { long tv_sec; /*seconds*/ long tv_nsec; /*nanoseconds*/ }; |
_timeout_がNULLとして指定されている場合、 ppoll ()は無期限にブロックできます。
返り値
成功すると、正の数が返されます。これは、ゼロ以外の_revents_フィールド(つまり、イベントまたはエラーが報告された記述子)を持つ構造の数です。 値0は、呼び出しがタイムアウトになり、ファイル記述子の準備ができていないことを示します。 エラーの場合、-1が返され、_errno_が適切に設定されます。
エラー
Tag | Description |
---|---|
EBADF | An invalid file descriptor was given in one of the sets. |
EFAULT | The array given as argument was not contained in the calling program’s address space. |
EINTR | A signal occurred before any requested event. |
EINVAL | The nfds value exceeds the RLIMIT_NOFILE value. |
*ENOMEM * | There was no space to allocate file descriptor tables. |
Linuxノート
Linux* ppoll ()システムコールは、_timeout_引数を変更します。 ただし、glibcラッパー関数は、システムコールに渡されるタイムアウト引数にローカル変数を使用することにより、この動作を隠します。 したがって、glibc *ppoll ()関数は、_timeout_引数を変更しません。
BUGS
準拠
バージョン
ノート
実装によっては、_timeout_として使用するために値-1で非標準定数 INFTIM を定義します。 この定数はglibcでは提供されていません。
関連項目
[[File:]] image :http://www.finddevguides.com/images/next.gif [next] [[File:]]
広告
Advertisements |