GNU/Linux >> Linux の 問題 >  >> Linux

Linux で select が使用される理由

実行し続けたいプログラム インタラクティブなユーザー入力の読み取りは、マルチスレッド化する必要がありますまたは 入力ストリームを注意深く、具体的には条件付きで読み取る必要があります。

Select(2) 2 番目の設計パターンの実装に使用できます。アプリケーション全体をブロックすることなく、入力を読み取ることができるかどうかを判断できます。


select() システム コールは、関心のあるファイル ディスクリプタで読み取るデータがあるかどうかを示します。厳密には、ファイル ディスクリプタでの読み取り操作がブロックされるかどうかの問題です。

read() を実行すると シリアル ポートに接続されているようなファイル ディスクリプタで、読み取るデータがない場合、読み取るデータが存在するまで呼び出しはハングします。 select() を使用したプログラム そのようにブロックされたくありません.

あなたも尋ねます:

<ブロック引用>

すでに select に設定されているファイル記述子を渡すときに、ファイル記述子を 1 ずつインクリメントして渡す必要があるのはなぜですか。 ?

それはおそらくFD_SETのサイズを指定しています。 select() の最初の引数 nfds として知られています そしてPOSIXは言う:

<ブロック引用>

nfds 引数は、テストする記述子の範囲を指定します。最初の nfds 記述子は各セットでチェックされます。つまり、0 から nfds-1 までの記述子 記述子セットで検査されるものとします。

したがって、ファイル記述子 n をテストするには 、nfds の値 n+1 以上である必要があります .


ブロックせずに何らかの IO の準備が整うまで、ファイル記述子を常に監視する必要がある場合は、select 呼び出しを使用します。

通常、IO (例:read() ) ノンブロッキングが必要な場合に使用されます。:man ページを参照してください

関連する API もお読みください


Linux
  1. Linux –すべてがファイルですか?

  2. Linux のファイル権限 – 読み取り/書き込み/実行

  3. Linux で .so.1 ファイルが必要なのはなぜですか?

  1. ファイル列を選択するための 10 の実用的な Linux カット コマンドの例

  2. 使用中のファイルの切り捨て (Linux)

  3. LINUX に 3 種類の X セレクションがあるのはなぜですか?

  1. Linuxでlsの代わりにexaを使用する理由

  2. Linuxでファイルを移動する方法

  3. rsync が Linux で /sys からファイルをコピーできないのはなぜですか?