Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 274

Автор ΠœΡΡ‚ΡŒΡŽ НСйл

select

ΠžΡ‡Π΅Π½ΡŒ часто ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Linux Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° состояния ряда Π²Π²ΠΎΠ΄ΠΎΠ² для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ΅ дСйствиС. НапримСр, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, такая ΠΊΠ°ΠΊ эмулятор Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°, нуТдаСтся Π² эффСктивном способС ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ чтСния с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ с ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π°. Π’ ΠΎΠ΄Π½ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ систСмС ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ Ρ†ΠΈΠΊΠ» "Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ оТидания", ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π²Π²ΠΎΠ΄ Π² поискС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΈΡ…, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ΠΈ появятся. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°ΡΡ‚ΠΎΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ЦП.

БистСмный Π²Ρ‹Π·ΠΎΠ²

select
позволяСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΆΠ΄Π°Ρ‚ΡŒ прибытия Π΄Π°Π½Π½Ρ‹Ρ… (ΠΈΠ»ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π²Ρ‹Π²ΠΎΠ΄Π°) ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторах. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° эмулятора Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Ρƒ Π½Π΅Π΅ Π½Π΅ появится Ρ€Π°Π±ΠΎΡ‚Π°. Аналогичным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с многочислСнными ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ, оТидая запросы ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… сокСтах.

Ѐункция

select
ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ структурами Π΄Π°Π½Π½Ρ‹Ρ…
fd_set
, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌΠΈ собой мноТСства ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов. Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этих мноТСств ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π½Π°Π±ΠΎΡ€ макросов:

<b>#include &lt;sys/types.h&gt; #include &lt;sys/time.h&gt;</b>

<b>void FD_ZERO(fd_set *fdset);</b>

<b>void FD_CLR(int fd, fd_set *fdset);</b>

<b>void FD_SET(int fd, fd_set *fdset);</b>

<b>int FD_ISSET(int fd, fd_set *fdset);</b>

Как ΠΈ прСдполагаСтся Π² соотвСтствии с ΠΈΡ… ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, макрос

FD_ZERO
ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ структуру
fd_set
пустым мноТСством,
FD_SET
ΠΈ
FD_CLR
Π·Π°Π΄Π°ΡŽΡ‚ ΠΈ ΠΎΡ‡ΠΈΡ‰Π°ΡŽΡ‚ элСмСнты мноТСства, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΌΡƒ дСскриптору, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€
fd
, Π° макрос
FD_ISSET
Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ссылаСтся
fd
, являСтся элСмСнтом структуры
fd_set
, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€
fdset
. МаксимальноС количСство Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов Π² структурС Ρ‚ΠΈΠΏΠ°
fd_set
задаСтся константой
FD_SETDIZE
.

Ѐункция

select
ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ бСсконСчной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ задаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ структуры
struct timeval
. Она ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² Ρ„Π°ΠΉΠ»Π΅ sys/time.h ΠΈ содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты:

<b>struct timeval {</b>

<b>Β time_t tv_sec;Β /* Π‘Π΅ΠΊΡƒΠ½Π΄Ρ‹ */</b>

<b>Β long tv_usec;Β  /* ΠœΠΈΠΊΡ€ΠΎΡΠ΅ΠΊΡƒΠ½Π΄Ρ‹ */</b>

<b>}</b>

Π’ΠΈΠΏ

time_t
, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² Ρ„Π°ΠΉΠ»Π΅ sys/types.h, β€” цСлочислСнный. БистСмный Π²Ρ‹Π·ΠΎΠ²
select
ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

<b>#include &lt;sys/types.h&gt;</b>

<b>#include &lt;sys/time.h&gt;</b>

<b>int select(int nfds, fd_set *readfds, fd_set *writefds,</b>

<b>Β fd_set *errorfds, struct timeval *timeout);</b>

Π’Ρ‹Π·ΠΎΠ²

select
позволяСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π½Π΅ Π³ΠΎΡ‚ΠΎΠ² Π»ΠΈ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· мноТСства Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов ΠΊ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ ΠΈΠ»ΠΈ записи, ΠΈΠ»ΠΈ находится Π»ΠΈ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΠΈΠ·-Π·Π° состояния ошибки ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° готовности ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· дСскрипторов.

АргумСнт

nfds
Π·Π°Π΄Π°Π΅Ρ‚ количСство провСряСмых Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов, ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Ρƒ дСскрипторы ΠΎΡ‚ 0 Π΄ΠΎ
nfds-1
. КаТдоС ΠΈΠ· Ρ‚Ρ€Π΅Ρ… мноТСств дСскрипторов ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ пустым ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ, Ρ‚ΠΎΠ³Π΄Π° связанный с Π½ΠΈΠΌ тСст Π½Π΅ выполняСтся.

Ѐункция

select
Π²Π΅Ρ€Π½Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, Ссли ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· дСскрипторов Π² мноТСствС
readfds
Π³ΠΎΡ‚ΠΎΠ² ΠΊ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ, ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ дСскриптор ΠΈΠ· мноТСства
writefds
Π³ΠΎΡ‚ΠΎΠ² ΠΊ записи ΠΈΠ»ΠΈ Ρƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· дСскрипторов мноТСства
errorfd
Π΅ΡΡ‚ΡŒ состояниС ошибки. Если Π½ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· условий Π½Π΅ ΡΠΎΠ±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ,
select
Π²Π΅Ρ€Π½Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ послС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ
timeout
. Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€
timeout
β€” пустой ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈ Π½Π΅Ρ‚ активности Π½Π° сокСтах, Π²Ρ‹Π·ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ врСмя.

Когда

select
Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, мноТСства дСскрипторов Π±ΡƒΠ΄ΡƒΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΊ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ ΠΈΠ»ΠΈ записи ΠΈΠ»ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ошибки дСскрипторы. Для ΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ макрос
FD_ISSET
, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ дСскрипторы Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ внимания. МоТно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ timeout для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ врСмя, ΠΎΡΡ‚Π°ΡŽΡ‰Π΅Π΅ΡΡ Π΄ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΡ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания, Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ стандартом X/Open. ΠŸΡ€ΠΈ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания всС мноТСства дСскрипторов Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‡ΠΈΡ‰Π΅Π½Ρ‹.

Π’Ρ‹Π·ΠΎΠ² select Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±Ρ‰Π΅Π΅ количСство дСскрипторов Π² ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… мноТСствах. Π’ случаС сбоя ΠΎΠ½ Π²Π΅Ρ€Π½Π΅Ρ‚ -1 ΠΈ установит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

errno
, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ошибки β€”
EBADF
для Π½Π΅Π²Π΅Ρ€Π½Ρ‹Ρ… дСскрипторов,
EINTR
для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ·-Π·Π° прСрывания ΠΈ
EINVAL
для Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²
nfds
ΠΈΠ»ΠΈ
timeout
.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Linux ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ структуру, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚

timeout
, фиксируя ΠΎΡΡ‚Π°Π²ΡˆΠ΅Π΅ΡΡ нСиспользованноС врСмя, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ вСрсий UNIX этого Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚. Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
select
, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ структуру Ρ‚ΠΈΠΏΠ°
timeval
ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π±Π΅Π· обновлСния содСрТимого. Π’ систСмС Linux этот ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ОБ Linux измСняСт структуру
timeval
ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ истСчСнии ΠΎΡ‚Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания. Если Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΈΠ»ΠΈ пСрСноситС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
select
, слСдуСт ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ эту Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΈ всСгда ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ врСмя оТидания. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹, ΠΎΠ½ΠΈ просто Ρ€Π°Π·Π½Ρ‹Π΅!

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 15.8.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 15.8. Ѐункция
select

Π”Π°Π»Π΅Π΅ для дСмонстрации примСнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ select ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° select.c. Π‘ΠΎΠ»Π΅Π΅ слоТный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ (стандартный Π²Π²ΠΎΠ΄ β€” дСскриптор 0) со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ оТидания 2,5 сСкунды. Π”Π°Π½Π½Ρ‹Π΅ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Π²ΠΎΠ΄ Π³ΠΎΡ‚ΠΎΠ². ЕстСствСнно Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ² Π² зависимости ΠΎΡ‚ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° прилоТСния Π΄Ρ€ΡƒΠ³ΠΈΠ΅ дСскрипторы, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ (serial lines) ΠΈ сокСты.