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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² срСдС Linux. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 85

Автор Майкл ДТонсон

Для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ любой ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ символа установитС Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² _POSIX_VDISABLE. Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС опрСдСлСния _POSIX_VDISABLE ΠΊΠ°ΠΊ значСния, Π½Π΅ Ρ€Π°Π²Π½ΠΎΠ³ΠΎ -1. _POSIX_VDISABLE Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Linux, Π½ΠΎ пСрСносимая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΊ соТалСнию, Π½Π΅ смоТСт Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ располоТСний ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… символов Π²ΠΎ всСх систСмах.

16.5.8. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π»Π°Π³ΠΈ

Π€Π»Π°Π³ΠΈ локального Ρ€Π΅ΠΆΠΈΠΌΠ° Π²Π»ΠΈΡΡŽΡ‚ Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠ΅Ρ€Π΅ относится ΠΊ способу сбора символов ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ. Когда устройство находится Π² каноничСском Ρ€Π΅ΠΆΠΈΠΌΠ΅ (Ρ€Π΅ΠΆΠΈΠΌΠ΅ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ), символы ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ локально Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ систСму Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ встрСтится символ Π½ΠΎΠ²ΠΎΠΉ строки. На этом этапС пСрСдаСтся вся строка, Π° ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ½Π΅Ρ† ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΅Π΅ Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ отраТСния. Π’ Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ пСрСдаСтся Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ систСму Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠ½ принимаСтся. Иногда символ отобраТаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ систСмой, ΠΈΠ½ΠΎΠ³Π΄Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ локальной, Π° ΠΈΠ½ΠΎΠ³Π΄Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ пароля, ΠΎΠ½ ΠΈ вовсС Π½Π΅ отобраТаСтся.

НСкоторыС Ρ„Π»Π°Π³ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ вСсти сСбя ΠΈΠ½Π°Ρ‡Π΅, Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ находится Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»: каноничСском ΠΈΠ»ΠΈ Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ. Π€Π»Π°Π³ΠΈ, Π²Π΅Π΄ΡƒΡ‰ΠΈΠ΅ сСбя ΠΈΠ½Π°Ρ‡Π΅ Π² каноничСском ΠΈ Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ…, ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Ρ‹.

Π€Π»Π°Π³ΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° c_cflag, пСрСчислСны Π½ΠΈΠΆΠ΅.

ICANON ΠŸΡ€ΠΈ установкС ICANON Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ каноничСский Ρ€Π΅ΠΆΠΈΠΌ. Если ICANON Π½Π΅ установлСн, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ. ECHO ΠŸΡ€ΠΈ установкС ECHO Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ локальноС эхо. Если ECHO Π½Π΅ установлСн, всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π»Π°Π³ΠΈ, названия ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с ECHO, эффСктивно ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ΠΈ всС, ΠΊΡ€ΠΎΠΌΠ΅ ECHONL, Π½Π΅ установлСны. ECHOCTL ΠŸΡ€ΠΈ установкС ECHOCTL ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ символы выводятся ΠΊΠ°ΠΊ ^C, Π³Π΄Π΅ Π‘ β€” это символ, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ 0100 ΠΊ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΌΡƒ символу, ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ 0200. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Control-C отобраТаСтся ΠΊΠ°ΠΊ ^C, a Control-? (Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ 0177) отобраТаСтся ΠΊΠ°ΠΊ ^? (? β€” это Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ 77). Π­Ρ‚ΠΎΡ‚ Ρ„Π»Π°Π³ Π² POSIX Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½. ECHOE Π’ каноничСском Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΡ€ΠΈ установкС ECHOE Π² случаС получСния символа ERASE ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ символ Π½Π° дисплСС ΠΏΠΎ возмоТности стираСтся. ECHOK ΠΈ ECHOKE Π’ каноничСском Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ символа KILL вся тСкущая строка стираСтся ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π°. Если Π½Π΅ установлСны Π½ΠΈ ECHOK, Π½ΠΈ ECHOKE, Π½ΠΈ ECHOE, выводится прСдставлСниС символа KILL с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ECHOCTL (^U ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) для обозначСния стСртой строки. Если установлСны ECHOE ΠΈ ECHOK, Π½ΠΎ ECHOKE Π½Π΅ установлСн, выводится прСдставлСниС символа KILL с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ECHOCTL, сопровоТдаСмоС Π½ΠΎΠ²ΠΎΠΉ строкой, которая Π·Π°Ρ‚Π΅ΠΌ обрабатываСтся OPOST Π² случаС установки OPOST. Если установлСны ECHOE, ECHOK ΠΈ ECHOKE, строка стираСтся. Π‘ΠΌ. описаниС ECHOPRT для Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ Π½Π° эту Ρ‚Π΅ΠΌΡƒ. Π€Π»Π°Π³ ECHOKE Π² POSIX Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½. Π’ систСмах Π±Π΅Π· Ρ„Π»Π°Π³Π° ECHOKE установка Ρ„Π»Π°Π³Π° ECHOK ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ эквивалСнтна установкС ΠΈ ECHOK, ΠΈ ECHOKE Π² Linux. ECHONL Π’ каноничСском Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΡ€ΠΈ установкС ECHONL символы Π½ΠΎΠ²ΠΎΠΉ строки ('\n') ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π΄Π°ΠΆΠ΅ Π² Ρ‚ΠΎΠΌ случаС, Ссли ECHO Π½Π΅ установлСн. ECHOPRT Π’ каноничСском Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΡ€ΠΈ установкС ECHOPRT символы выводятся ΠΏΡ€ΠΈ стирании, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ символы ERASE ΠΈΠ»ΠΈ WERASE (ΠΈΠ»ΠΈ KILL, Ссли установлСны ECHOK ΠΈ ECHOKE). Когда принимаСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ символ стирания, выводится \, Π° ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ послСднСго символа стирания (достигаСтся ΠΊΠΎΠ½Π΅Ρ† строки ΠΈΠ»ΠΈ вводится нСстСртый символ), выводится /. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Π²Π°ΠΌΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ символ просто отобраТаСтся. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π²ΠΎΠ΄ asdf, сопровоТдаСмый двумя символами ERASE, Π° Ρ‚Π°ΠΊΠΆΠ΅ df ΠΈ символом KILL, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: asdf\fd/df\fdsa/. Π­Ρ‚ΠΎΡ‚ Ρ„Π»Π°Π³ ΠΏΠΎΠ»Π΅Π·Π΅Π½ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ использования Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠ² Π²Ρ€ΠΎΠ΄Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚Π΅Π»Π΅Ρ‚Π°ΠΉΠΏΠ°, Π³Π΄Π΅ символы ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΡŽΡ‚ΡΡ Π½Π° Π±ΡƒΠΌΠ°Π³Π΅; Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ случаС ΠΎΠ½ Π½Π΅ пригодится. Π­Ρ‚ΠΎΡ‚ Ρ„Π»Π°Π³ Π² POSIX Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½. ISIG Если установлСн ISIG, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ символы INTR, QUIT ΠΈ SUSP Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ сигнала (SIGINT, SIGQUIT ΠΈΠ»ΠΈ SIGTSTP соотвСтствСнно; см. Π³Π»Π°Π²Ρƒ 12) всСм процСссам Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ процСссов ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π° Π½Π° Π΄Π°Π½Π½ΠΎΠΌ tty. NOFLSH ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ символов INTR ΠΈ QUIT ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΡΠ±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ. ΠŸΡ€ΠΈ установкС NOFLSH ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π½Π΅ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ. TOSTOP Если установлСн TOSTOP, Ρ‚ΠΎ Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° процСсс, Π½Π΅ находящийся Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ процСссов ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π°, пытаСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ запись Π² свой ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», пСрСдаСтся SIGTTOU всСй Π³Ρ€ΡƒΠΏΠΏΠ΅ процСссов, Ρ‡Π»Π΅Π½ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ являСтся Π΄Π°Π½Π½Ρ‹ΠΉ процСсс. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ этот сигнал останавливаСт процСсс, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ клавиш, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ символу SUSP. IEXTEN Π­Ρ‚ΠΎΡ‚ Ρ„Π»Π°Π³ описан Π² POSIX ΠΊΠ°ΠΊ опрСдСляСмый Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Он Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ символов Π²Π²ΠΎΠ΄Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Π₯отя пСрСносимыС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ этот Π±ΠΈΡ‚, IUCLC ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ возмоТности стирания символов Π² Linux зависимы ΠΎΡ‚ Π΅Π³ΠΎ установки. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, ΠΎΠ½ Ρ‡Π°Ρ‰Π΅ всСго Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² систСмах Linux, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ядро ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΡ€ΠΈ установкС tty, поэтому ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅.

16.5.9. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ read()

Π”Π²Π° элСмСнта Π² массивС с_сс Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌΠΈ символами ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌΡƒ Ρ€Π΅ΠΆΠΈΠΌΡƒ: VTIME ΠΈ VMIN. Π’ этом Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΎΠ½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, ΠΊΠΎΠ³Π΄Π° возвращаСтся read(). Π’ каноничСском Ρ€Π΅ΠΆΠΈΠΌΠ΅ read() возвращаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли строки Π±Ρ‹Π»ΠΈ собраны ΠΈΠ»ΠΈ Π±Ρ‹Π» достигнут ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ случая установки ΠΎΠΏΡ†ΠΈΠΈ O_NONBLOCK.

Π’ Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ считываниС ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π±Π°ΠΉΡ‚Ρƒ Π·Π° Ρ€Π°Π· нСэффСктивно. Π’Π°ΠΊΠΆΠ΅ нСэффСктивно ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π° Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивных Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π° чтСния.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² использовании poll(), ΠΊΠ°ΠΊ описано Π² Π³Π»Π°Π²Π΅ 13 ΠΈ дСмонстрируСтся Π² ΠΊΠΎΠ΄Π΅ robin.с. Если poll() сообщаСт, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор Π³ΠΎΡ‚ΠΎΠ² ΠΊ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ, Ρ‚ΠΎ извСстно, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ количСство Π±Π°ΠΉΡ‚ΠΎΠ². Однако сочСтаниС poll() со Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ сдСлаСт ваш ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ эффСктивным, прСдоставляя Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ большС Π±Π°ΠΉΡ‚ΠΎΠ² Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

"Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ символы" VTIME ΠΈ VMIN состоят Π² слоТных Π²Π·Π°ΠΈΠΌΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΡ…. VTIME опрСдСляСт ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для оТидания Π² дСсятых долях сСкунды (ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ большС cc_t, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это 8-Π±ΠΈΡ‚Π½Ρ‹ΠΉ unsigned char), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π²Π½ΡΡ‚ΡŒΡΡ Π½ΡƒΠ»ΡŽ. VMIN опрСдСляСт минимальноС количСство Π±Π°ΠΉΡ‚ для оТидания (Π½Π΅ для считывания β€” Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ read() опрСдСляСт максимальноС количСство Π±Π°ΠΉΡ‚ΠΎΠ² для считывания), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π²Π½ΡΡ‚ΡŒΡΡ Π½ΡƒΠ»ΡŽ.

β€’ Π•сли VTIME Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ, VMIN опрСдСляСт количСство Π±Π°ΠΉΡ‚ для оТидания. Π’Ρ‹Π·ΠΎΠ² read() Π½Π΅ возвращаСтся, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ считано VMIN Π±Π°ΠΉΡ‚ ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ сигнал.

β€’ Π•сли VMIN Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ, VTIME опрСдСляСт количСство дСсятых частСй сСкунд для оТидания read() ΠΏΠ΅Ρ€Π΅Π΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ, Π΄Π°ΠΆΠ΅ Ссли Π΄Π°Π½Π½Ρ‹Π΅ нСдоступны. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС read(), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Π½ΡƒΠ»ΡŒ, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ сигнализируСт ΠΎ состоянии ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π°, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚.

β€’ Π•сли Π½ΠΈ VTIME, Π½ΠΈ VMIN Π½Π΅ Ρ€Π°Π²Π½ΡΡŽΡ‚ΡΡ Π½ΡƒΠ»ΡŽ, VTIME опрСдСляСт количСство дСсятых Π΄ΠΎΠ»Π΅ΠΉ сСкунды для оТидания read() послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ доступСн хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ‚. Если Π΄Π°Π½Π½Ρ‹Π΅ доступны ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ read(), Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ запускаСтся. Если Π΄Π°Π½Π½Ρ‹Π΅ нСдоступны ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ read(), Ρ‚Π°ΠΉΠΌΠ΅Ρ€ запускаСтся ΠΏΡ€ΠΈ принятии ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π°. Π’Ρ‹Π·ΠΎΠ² read() возвращаСтся ΠΈΠ»ΠΈ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π±Ρ‹Π»ΠΈ приняты хотя Π±Ρ‹ Π±Π°ΠΉΡ‚Ρ‹ VMIN, ΠΈΠ»ΠΈ ΠΏΠΎ истСчСнии Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π°Π½ΡŒΡˆΠ΅. Он всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π½Π΅ запускаСтся, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ доступСн хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ‚.

β€’ Π•сли ΠΈ VTIME, ΠΈ VMIN Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ, read() всСгда Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ возвращаСтся, Π΄Π°ΠΆΠ΅ Ссли Π΄Π°Π½Π½Ρ‹Π΅ нСдоступны. И снова ноль Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° состояниС ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π°.