[解決済み] pollとselectの違いは何ですか?
質問
POSIX規格を参照しています セレクト と ポール システムC APIコールを使用します。
解決方法は?
私が思うに これ が質問に答えています。
<ブロッククオートリチャード・スティーブンス([email protected])より。
基本的な違いは、select()のfd_setがビットマスクであること、そして したがって、ある程度の固定されたサイズを持っています。 カーネルが カーネルがコンパイルされるときにこのサイズを制限しないようにする。 アプリケーションはFD_SETSIZEを好きなように定義することができます。 のシステムヘッダは、今日、それを暗示しています)しかし、それはより多くの仕事を必要とします。 4.4BSDの カーネルもSolarisのライブラリ関数も、この制限を設けています。 しかし、私は BSD/OS 2.1では、この制限を回避するようにコーディングされているようなので、この制限を回避することは可能です。 プログラミングのちょっとした問題ですが、可能です。) 誰かが Solaris のバグレポートで、これが修正されるかどうか見てみましょう。
しかし、poll() では、ユーザは pollfd の配列を割り当てる必要があります。 構造体を作成し、その配列のエントリ数を渡します。 基本的に制限はありません。 Casperが言うように、poll()を持つシステムの方が selectの方が移植性が高いです。 また、オリジナルの 実装(SVR3)では、ディスクリプタに-1をセットして カーネルがpollfd構造体のエントリを無視するようになり、そのため SVR4はこれを回避しています。 個人的には、私はいつも select() を使っていて、 poll() はほとんど使っていません。 をBSD環境にも対応させることができます。 誰かが実装を書くことができる このような環境では、select()を使用するpoll()が有効です。 見たことがない。select()とpoll()はどちらもPOSIX 1003.1g.
2017年10月更新
上記で参照したメールは少なくとも2001年と古いものであり、その
poll()
コマンドは、現在(2017年)、BSDを含むすべてのモダンなオペレーティングシステムでサポートされています。 実際、一部の人々は
select()
は非推奨とする
. 意見は別として
poll()
は、最近のシステムではもはや懸念されることはありません。 さらに
epoll()
はその後開発されました(
マニュアルを読む
) があり、現在も人気が高まっている。
現代の開発では、おそらく
select()
は、明確に間違っているわけではありませんが。
poll()
と、より現代的な進化を遂げています。
epoll()
と同じ機能 (およびそれ以上) を提供します。
select()
その制限を受けることなく
関連
-
C++の配列コピー
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] シェルで、「2>&1」はどういう意味ですか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] time(1) の出力における 'real', 'user' および 'sys' はどのような意味ですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] ++iとi++の違いは何ですか?
-
[解決済み] POSIX」の意味を教えてください。
-
[解決済み] 難読化Cコードコンテスト2006。sykes2.cの解説をお願いします。
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
解決済み] g++ コンパイルエラー: ')'トークンの前に一次式があることが予想される
-
error: '.' トークンの前にunqualified-idを指定する必要があります。
-
VSCodeでCプログラムを書くとエラーになる:ソースファイル "stdio.h" を開くことができない
-
[解決済み] flexible array member not at end of structエラーの原因は何ですか?
-
[解決済み] C言語で%sを正しく使う - 超基本レベル
-
[解決済み] char *とchar[]の違い [重複]
-
[解決済み] なぜmemsetではなくbzeroを使用するのですか?
-
[解決済み] C言語で配列のサイズを決定するにはどうすればよいですか?
-
[解決済み] C言語でファイルが存在するかどうかを確認する最も良い方法は何ですか?
-
[解決済み] C言語のi++と++iに性能差はあるのでしょうか?