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

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

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

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ»Π΅ termios.h, Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π•ΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² зависимости ΠΎΡ‚ установлСнной Ρƒ вас систСмы просто стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π‘ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° curses. ΠŸΡ€ΠΈ нСобходимости Π²ΠΎ врСмя компиляции ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² этой Π³Π»Π°Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ -lcurses Π² ΠΊΠΎΠ½Π΅Ρ† строки ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ компиляции. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΠΎΠ»Π΅Π΅ старых систСмах Linux Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° curses прСдставлСна Π² вСрсии, извСстной ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ "new curses". Π’ этих случаях имя Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ становятся ncurses ΠΈ -lncurses соотвСтствСнно.

ЗначСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ для управлСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠΌ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹, относящиСся ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ°ΠΌ:

β–‘ Π²Π²ΠΎΠ΄;

β–‘ Π²Ρ‹Π²ΠΎΠ΄;

β–‘ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅;

β–‘ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ;

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

Минимальная структура Ρ‚ΠΈΠΏΠ° termios ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (хотя Π² стандартС X/Open Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ):

#include <termios.h>

struct termios {

 tcflag_t c_iflag;

 tcflag_t c_oflag;

 tcflag_t c_cflag;

 tcflag_t c_lflag;

 cc_t c_cc[NCCS];

};

ИмСна элСмСнтов структуры ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ пяти Ρ‚ΠΈΠΏΠ°ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ пСрСчня.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ структуру Ρ‚ΠΈΠΏΠ° termios для Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹Π·Π²Π°Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ tcgetattr со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠΌ ΠΈΠ»ΠΈ описаниСм:

#include <termios.h>

int tcgetattr(int fd, struct termios *termios_p);

Π­Ρ‚ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ² записываСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… интСрфСйса Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° Π² структуру, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ termios_p. Если впослСдствии эти значСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹, Π²Ρ‹ смоТСтС ΠΏΠ΅Ρ€Π΅Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ интСрфСйс Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ tcsetattr ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

#include <termios.h>

int tcsetattr(int fd, int actions, const struct termios *termios_p);

ПолС actions Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ tcsetattr управляСт способом внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π•ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°:

β–‘ TCSANOW β€” измСняСт значСния сразу;

β–‘ TSCADRAIN β€” измСняСт значСния, ΠΊΠΎΠ³Π΄Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½;

β–‘ TCSAFLUSH β€” измСняСт значСния, ΠΊΠΎΠ³Π΄Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½, Π½ΠΎ отбрасываСт любой Π²Π²ΠΎΠ΄, доступный Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈ всС Π΅Ρ‰Π΅ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ read.

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

Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ настройки Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π—Π° ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ сохранСниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ΠΈΡ… восстановлСниС послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ выполнСния всСгда ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π΅ΠΆΠΈΠΌΡ‹ ΠΈ связанныС с Π½ΠΈΠΌΠΈ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. НСкоторыС характСристики Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² довольно спСциализированныС ΠΈ Ρ€Π΅Π΄ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, поэтому ΠΌΡ‹ остановимся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° основных. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π½Π°Ρ‚ΡŒ большС, просмотритС страницы ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ справочного руководства вашСй систСмы Π»ΠΈΠ±ΠΎ скопируйтС стандарт POSIX ΠΈΠ»ΠΈ X/Open.

НаиболСС Π²Π°ΠΆΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΠΈ, β€” Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ (local). ΠšΠ°Π½ΠΎΠ½ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΈ нСканоничСский Ρ€Π΅ΠΆΠΈΠΌΡ‹ β€” Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² вашСм ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ: ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΠΆΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ <Enter> ΠΈΠ»ΠΈ <Return> для чтСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΌ слСдуСт Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΆΠ΄Π°Ρ‚ΡŒ всю строку Π²Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ Π½Π°Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° Π²Π²ΠΎΠ΄, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ Π½Π°Π±Ρ€Π°Π½ Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅.

Π Π΅ΠΆΠΈΠΌΡ‹ Π²Π²ΠΎΠ΄Π°

Π Π΅ΠΆΠΈΠΌΡ‹ Π²Π²ΠΎΠ΄Π° ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ обрабатываСтся Π²Π²ΠΎΠ΄ (символы, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΎΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π° ΠΈΠ»ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹) Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΅Π³ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π’Ρ‹ управляСтС Π²Π²ΠΎΠ΄ΠΎΠΌ, устанавливая Ρ„Π»Π°Π³ΠΈ Π² элСмСнтС c_iflag структуры termios. ВсС Ρ„Π»Π°Π³ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ макросы ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ поразрядной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ OR. Π­Ρ‚ΠΎ свойствСнно всСм Ρ€Π΅ΠΆΠΈΠΌΠ°ΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°.

Π’ элСмСнтС c_iflag ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ макросы:

β–‘ BRKINT β€” Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° Π² Π»ΠΈΠ½ΠΈΠΈ связи обнаруТиваСтся Ρ€Π°Π·Ρ€Ρ‹Π² (потСря соСдинСния);

β–‘ IGNBRK β€” ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π·Ρ€Ρ‹Π²Ρ‹ соСдинСния Π² Π»ΠΈΠ½ΠΈΠΈ связи;

β–‘ ICRNL β€” ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ символ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ Π² символ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку;

β–‘ IGNCR β€” ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ символы Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ;

β–‘ INLCR β€” ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ символы ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку Π² символы Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ;

β–‘ IGNPAR β€” ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ символы с ошибками чСтности;

β–‘ INCPK β€” выполняСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ чСтности Ρƒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… символов;

β–‘ PARMRK β€” ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ ошибки чСтности;

β–‘ ISTRIP β€” ΠΎΠ±Ρ€Π΅Π·Π°Π΅Ρ‚ (Π΄ΠΎ сСми Π±ΠΈΡ‚ΠΎΠ²) всС Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ символы;

β–‘ IXOFF β€” Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅;

β–‘ IXON β€” Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅.

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

Если Ρ„Π»Π°Π³ΠΈ BRKINT ΠΈ IGNBRK Π½Π΅ установлСны, сбой Π½Π° Π»ΠΈΠ½ΠΈΠΈ связи считываСтся ΠΊΠ°ΠΊ символ NULL (0x00).

Π’Π°ΠΌ Π½Π΅ придСтся часто ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌΡ‹ Π²Π²ΠΎΠ΄Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ стандартныС значСния β€” Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящиС, ΠΈ поэтому ΠΌΡ‹ большС Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡ… ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ.

Π Π΅ΠΆΠΈΠΌΡ‹ Π²Ρ‹Π²ΠΎΠ΄Π°

Π­Ρ‚ΠΈ Ρ€Π΅ΠΆΠΈΠΌΡ‹ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ способом ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… символов, Ρ‚.Π΅. Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ символы, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚ ΠΈΠ»ΠΈ экран. Как ΠΈ слСдовало ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… β€” оборотная сторона Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² Π²Π²ΠΎΠ΄Π°. Π•ΡΡ‚ΡŒ нСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π»Π°Π³ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ связаны Π² основном с Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌΠΈ для ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ трСбуСтся врСмя для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Π°ΠΊΠΈΡ… символов, ΠΊΠ°ΠΊ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Ρ‹ ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ. ΠŸΠΎΡ‡Ρ‚ΠΈ всС ΠΎΠ½ΠΈ Π»ΠΈΠ±ΠΎ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρ‹ стали быстрСС) ΠΈΠ»ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… характСристик Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° terminfo, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ·ΠΆΠ΅ Π² этой Π³Π»Π°Π²Π΅.

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

β–‘ OPOST β€” Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π²Ρ‹Π²ΠΎΠ΄Π°;

β–‘ ONLCR β€” ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π² символ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки ΠΏΠ°Ρ€Ρƒ символов Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ/ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки;

β–‘ OCRNL β€” ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ любой символ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ Π² символ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки;

β–‘ ONOCR β€” Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ символ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ Π² столбцС 0;

β–‘ ONLRET β€” символ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку выполняСт Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ;

β–‘ OFILL β€” посылаСт символы заполнСния для формирования Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ;

β–‘ OFDEL β€” примСняСт символ DEL ΠΊΠ°ΠΊ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ вмСсто символа NULL;

β–‘ NLDLY β€” Π²Ρ‹Π±ΠΎΡ€ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ для символа ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку;

β–‘ CRDLY β€” Π²Ρ‹Π±ΠΎΡ€ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ для символа Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ;

β–‘ TABDLY β€” Π²Ρ‹Π±ΠΎΡ€ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ для символа табуляции;

β–‘ BSDLY β€” Π²Ρ‹Π±ΠΎΡ€ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ для символа Backspace;

β–‘ VTDLY β€” Π²Ρ‹Π±ΠΎΡ€ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ для символа Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ табуляции;

β–‘ FFDLY β€” Π²Ρ‹Π±ΠΎΡ€ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ для символа ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ страницы.

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

Если Ρ„Π»Π°Π³ OPOST Π½Π΅ установлСн, всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π»Π°Π³ΠΈ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

Π Π΅ΠΆΠΈΠΌΡ‹ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΎΠΆΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, поэтому ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡ… ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ Π² дальнСйшСм.

Π Π΅ΠΆΠΈΠΌΡ‹ управлСния

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

β–‘ CLOCAL β€” ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ линиями с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠ΄Π΅ΠΌΠ°;

β–‘ CREAD β€” Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ΅ΠΌ символов;

β–‘ CS5 β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡΡ‚ΡŒ Π±ΠΈΡ‚ΠΎΠ² Π² отправляСмых ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹Ρ… символах;

β–‘ CS6 β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡˆΠ΅ΡΡ‚ΡŒ Π±ΠΈΡ‚ΠΎΠ² Π² отправляСмых ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹Ρ… символах;

β–‘ CS7 β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ сСмь Π±ΠΈΡ‚ΠΎΠ² Π² отправляСмых ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹Ρ… символах;

β–‘ CS8 β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ восСмь Π±ΠΈΡ‚ΠΎΠ² Π² отправляСмых ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹Ρ… символах;

β–‘ CSTOPB β€” устанавливаСт Π΄Π²Π° стоповых Π±ΠΈΡ‚Π° вмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ;

β–‘ HUPCL β€” Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ линиями ΠΌΠΎΠ΄Π΅ΠΌΠ° ΠΏΡ€ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ;

β–‘ PARENB β€” Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ чСтности;

β–‘ PARODD β€” примСняСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ нСчСтности вмСсто контроля чСтности.

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

Если Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ послСдний дСскриптор Ρ„Π°ΠΉΠ»Π°, ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΠΉΡΡ Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», Π·Π°ΠΊΡ€Ρ‹Ρ‚ ΠΈ ΠΏΡ€ΠΈ этом Ρ„Π»Π°Π³ HUPCL установлСн, ΠΎΠ½ устанавливаСт Π»ΠΈΠ½ΠΈΠΈ управлСния ΠΌΠΎΠ΄Π΅ΠΌΠ° Π² состояниС останова (hang-up).

Π Π΅ΠΆΠΈΠΌΡ‹ управлСния ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² основном ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊ ΠΌΠΎΠ΄Π΅ΠΌΡƒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ связи, хотя ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³Π΅ с Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠΌ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π»Π΅Π³Ρ‡Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ настройку Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°, Ρ‡Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ стандартноС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π»ΠΈΠ½ΠΈΠΉ связи с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² управлСния структуры termios.