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

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

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

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹

Π­Ρ‚ΠΈ Ρ€Π΅ΠΆΠΈΠΌΡ‹ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ характСристиками Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ, устанавливая Ρ„Π»Π°Π³ΠΈ элСмСнта c_iflag структуры termios с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… макросов:

β–‘ ECHO β€” Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ локальноС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… символов;

β–‘ ECHOE β€” выполняСт ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ Backspace, Space, Backspace ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ символа ERASE (ΡΡ‚Π΅Ρ€Π΅Ρ‚ΡŒ);

β–‘ ECHOK β€” стираСт строку ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ символа KILL;

β–‘ ECHONL β€” ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ символы ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку;

β–‘ ICANON β€” Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π²Π²ΠΎΠ΄Π° (см. тСкст, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° Π΄Π°Π½Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅Ρ‡Π½Π΅ΠΌ);

β–‘ IEXTEN β€” Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, зависящиС ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ;

β–‘ ISIG β€” Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ сигналов;

β–‘ NOFLSH β€” ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡƒΡŽ запись ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ;

β–‘ TOSTOP β€” посылаСт сигнал Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΌ процСссам ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ записи.

Π”Π²Π° самых Π²Π°ΠΆΠ½Ρ‹Ρ… Ρ„Π»Π°Π³Π° Π² этой Π³Ρ€ΡƒΠΏΠΏΠ΅ β€” ECHO, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄Π°Π²Π»ΡΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… символов, ΠΈ ICANON, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄Π²ΡƒΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹Ρ… символов. Если установлСн Ρ„Π»Π°Π³ ICANON, говорится, Ρ‡Ρ‚ΠΎ строка Π² каноничСском Ρ€Π΅ΠΆΠΈΠΌΠ΅, Ссли Π½Π΅Ρ‚, Ρ‚ΠΎ строка Π² нСканоничСском Ρ€Π΅ΠΆΠΈΠΌΠ΅.

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ символы

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ символы β€” это коллСкция символов ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… символам ΠΎΡ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ клавиш <Ctrl>+<C>, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΡ…. Π’ элСмСнтС c_cc структуры termios содСрТатся символы, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹Π΅ Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа (Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€ Π² массивС) опрСдСляСтся макросом, Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ для ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… символов Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ.

Массив c_cc ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ двумя ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами, зависящими ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, установлСн для Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° каноничСский Ρ€Π΅ΠΆΠΈΠΌ (Ρ‚.Π΅. установлСн Ρ„Π»Π°Π³ ICANON Π² элСмСнтС c_lflag структуры termios) ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Π΄Π²ΡƒΡ… Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ΅ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² элСмСнтов массива. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ слСдуСт ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ значСния для этих Π΄Π²ΡƒΡ… Ρ€Π΅ΠΆΠΈΠΌΠΎΠ².

Для каноничСского Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ индСксы:

β–‘ VEOF β€” символ EOF;

β–‘ VEOL β€” Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ символ ΠΊΠΎΠ½Ρ†Π° строки EOL;

β–‘ VERASE β€” символ ERASE;

β–‘ VINTR β€” символ прСрывания INTR;

β–‘ VKILL β€” символ уничтоТСния KILL;

β–‘ VQUIT β€” символ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ QUIT;

β–‘ VSUSP β€” символ приостанова SUSP;

β–‘ VSTART β€” символ запуска START;

β–‘ VSTOP β€” символ останова STOP.

Для каноничСского Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ индСксы:

β–‘ VINTR β€” символ INTR;

β–‘ VMIN β€” минимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ MIN;

β–‘ VQUIT β€” символ QUIT;

β–‘ VSUSP β€” символ SUSP;

β–‘ VTIME β€” врСмя оТидания TIME;

β–‘ VSTART β€” символ START;

β–‘ VSTOP β€” символ STOP.

Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для Π±ΠΎΠ»Π΅Π΅ слоТной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… символов ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы ΠΈ нСканоничСскиС значСния ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹, ΠΌΡ‹ описываСм ΠΈΡ… Π² Ρ‚Π°Π±Π». 5.1.


Π’Π°Π±Π»ΠΈΡ†Π° 5.1

Π‘ΠΈΠΌΠ²ΠΎΠ» ОписаниС INTR ЗаставляСт Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ сигнал SIGINT процСссам, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ ΠΊ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρƒ. ΠœΡ‹ обсудим сигналы Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π² Π³Π»Π°Π²Π΅ 11 QUIT ЗаставляСт Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ сигнал SIGQUIT процСссам, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ ΠΊ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρƒ ERASE ЗаставляСт Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ послСдний символ Π² строкС KILL ЗаставляСт Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всю строку EOF ЗаставляСт Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ всС символы строки Π²ΠΎ Π²Π²ΠΎΠ΄, считываСмый ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Если строка пустая, Π²Ρ‹Π·ΠΎΠ² read Π²Π΅Ρ€Π½Π΅Ρ‚ ноль символов, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ встрСтил Π½Π° ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π° EOL ДСйствуСт ΠΊΠ°ΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒ строки Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎΠΌΡƒ символу ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку SUSP ЗаставляСт Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ сигнал SIGSUSP процСссам, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ ΠΊ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρƒ. Если ваша систСма UNIX ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ заданиями, Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ приостановлСно STOP ДСйствуСт ΠΊΠ°ΠΊ "ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠ°", Ρ‚. Π΅. ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ дальнСйший Π²Ρ‹Π²ΠΎΠ΄ Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π». ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ΡΡ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ управлСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ XON/XOFF ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ задаСтся ΠΊΠ°ΠΊ ASCII-символ XOFF (<Ctrl>+<S>) START ВозобновляСт Π²Ρ‹Π²ΠΎΠ΄ послС символа STOP, часто ASCII-символ XON ЗначСния TIME ΠΈ MIN

ЗначСния TIME ΠΈ MIN ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² нСканоничСском Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ вмСстС для управлСния считываниСм Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. ВмСстС ΠΎΠ½ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ дСйствиями ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ дСскриптор Ρ„Π°ΠΉΠ»Π°, ассоциированный с Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠΌ.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°.

β–‘ MIN = 0 ΠΈ TIME = 0. Π’ этом случаС Π²Ρ‹Π·ΠΎΠ² read всСгда Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ сразу ΠΆΠ΅. Если ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ символы доступны, ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Ρ‹, Ссли Π½Π΅Ρ‚, Ρ‚ΠΎ read Π²Π΅Ρ€Π½Π΅Ρ‚ ноль, ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ символы Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ считаны.

β–‘ MIN = 0 ΠΈ TIME > 0. Π’ этом случаС Π²Ρ‹Π·ΠΎΠ² read Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° всС доступныС символы Π±ΡƒΠ΄ΡƒΡ‚ считаны ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ TIME дСсятых Π΄ΠΎΠ»Π΅ΠΉ сСкунды. Если Π½Π΅Ρ‚ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Ρ… символов ΠΈΠ·-Π·Π° ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΎΡ‚ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, read Π²Π΅Ρ€Π½Π΅Ρ‚ 0. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ Π²Π΅Ρ€Π½Π΅Ρ‚ количСство ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Ρ… символов.

β–‘ MIN > 0 ΠΈ TIME = 0. Π’ этом случаС Π²Ρ‹Π·ΠΎΠ² read Π±ΡƒΠ΄Π΅Ρ‚ ΠΆΠ΄Π°Ρ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ MIN символов, ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²Π΅Ρ€Π½Π΅Ρ‚ это количСство символов. Π’ случаС ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π° возвращаСтся 0.

β–‘ MIN > 0 ΠΈ TIME > 0. Π­Ρ‚ΠΎ самый слоТный случай. ПослС Π²Ρ‹Π·ΠΎΠ²Π° read ΠΆΠ΄Π΅Ρ‚ получСния символа. Когда ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ символа запускаСтся ΠΌΠ΅ΠΆΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ (ΠΈΠ»ΠΈ пСрСзапускаСтся, Ссли ΠΎΠ½ ΡƒΠΆΠ΅ Π±Ρ‹Π» Π·Π°ΠΏΡƒΡ‰Π΅Π½). Π’Ρ‹Π·ΠΎΠ² read Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π»ΠΈΠ±ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ MIN символов, Π»ΠΈΠ±ΠΎ мСТсимвольноС врСмя прСвысит TIME дСсятых Π΄ΠΎΠ»Π΅ΠΉ сСкунды. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ для подсчСта Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ СдинствСнным Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ клавиши <Esc> ΠΈ запуском Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½ΠΎΠΉ escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ слСдуСт Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ сСтСвыС соСдинСния ΠΈΠ»ΠΈ высокая Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° процСссора ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΡ‚Π΅Ρ€Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ свСдСния ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Установив нСканоничСский Ρ€Π΅ΠΆΠΈΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ значСния MIN ΠΈ TIME, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠΎΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π²Π²ΠΎΠ΄Π°.

Доступ ΠΊ Ρ€Π΅ΠΆΠΈΠΌΠ°ΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ termios, Π½Π°Ρ…ΠΎΠ΄ΡΡΡŒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для получСния ΠΈΡ… списка:

$ stty -a

На установлСнных Ρƒ Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² систСмах Linux, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΡ… структурами termios с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ со стандартными, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄:

speed 38400 baud; rows 24; columns 80; line = 0;

intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;

eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;

werase = ^W; lnext = ^V; flush = ^O, min = 1; time = 0;

-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts

-ignbrk -brkint -ignpar -parmirk -inpck -istrip -inlcr -igncr icrnl -ixon -ixoff

-iuclc -ixany -imaxbe1 iutf8

opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel n10 cr0 tab0 bs0 vt0 ff0

isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt

echoctl echoke

Π‘Ρ€Π΅Π΄ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, ΠΊΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡ‚Π΅, символ EOF β€” это <Ctrl>+<D>, ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. ЭкспСримСнтируя с установками Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°, Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» Π² нСстандартном Ρ€Π΅ΠΆΠΈΠΌΠ΅, Ρ‡Ρ‚ΠΎ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚ Π΅Π³ΠΎ дальнСйшСС использованиС. Π•ΡΡ‚ΡŒ нСсколько способов ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с этой Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΡΡ‚ΡŒΡŽ.

β–‘ ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ β€” ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Ссли ваша вСрсия stty ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΅Π΅:

$ stty sane

Если Π²Ρ‹ потСряли ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ клавиши Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ Π² символ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ строку), Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, потрСбуСтся ввСсти stty sane, Π½ΠΎ вмСсто наТатия клавиши <Enter> Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ клавиш <Ctrl>+<J> (которая ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку).

β–‘ Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ β€” ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ stty -g ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ установки stty Π² Ρ„ΠΎΡ€ΠΌΡƒ, Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ ΠΊ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌΡƒ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Π½ΠΈΡŽ. Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π±Ρ€Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

$ stty -g > save_stty