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

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

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

#include <curses.h>

#include <unistd.h>


static struct termios initial_settings, new_settings;

static int peek_character = -1;

void init_keyboard();

void close_keyboard();

int kbhit();

int readch();

2. Π€ΡƒΠ½ΠΊΡ†ΠΈΡ main Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ init_keyboard для настройки Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°, Π·Π°Ρ‚Π΅ΠΌ выполняСт Ρ†ΠΈΠΊΠ» ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² сСкунду, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· вызывая Π² Π½Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ kbhit. Если Π½Π°ΠΆΠ°Ρ‚Π° клавиша <q>, функция close_keyboard восстанавливаСт Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ:

int main() {

 int ch = 0;

 init_keyboard();

 while (ch != 'q') {

  printf("looping\n");

  sleep(1);

  if (kbhit()) {

   ch = readch();

   printf("you hit %c\n", ch);

  }

 }

 close_keyboard();

 exit(0);

}

3. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ init_keyboard ΠΈ close_keyboard Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈ ΠΊΠΎΠ½Ρ†Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

void init_keyboard() {

 tcgetattr(0, &initial_settings);

 new_settings = initial_settings;

 new_settings.c_lflag &= ~ICANON;

 new_settings.c_lflag &= ~ECHO;

 new_settings.c_lflag &= ~ISIG;

 new_settings.c_cc[VMIN] = 1;

 new_settings.c_cc[VTIME] = 0;

 tcsetattr(0, TCSANOW, &new_settings);

}


void close_keyboard() {

 tcsetattr(0, TCSANOW, &initial_settings);

}

4. Π’Π΅ΠΏΠ΅Ρ€ΡŒ функция, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰Π°Ρ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ клавиши:

int kbhit() {

 char ch;

 int nread;

 if (peek_character != -1) return 1;

 new_settings.c_cc[VMIN] = 0;

 tcsetattr(0, TCSANOW, &new_settings);

 nread = read(0, sch, 1);

 newrsettings.c_cc[VMIN] = 1;

 tcsetattr(0, TCSANOW, &new_settings);

 if (nread == 1) {

  peek_character = ch;

  return 1;

 }

 return 0;

}

5. ΠΠ°ΠΆΠ°Ρ‚Ρ‹ΠΉ символ считываСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ readch, которая Π·Π°Ρ‚Π΅ΠΌ восстанавливаСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -1 ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ peek_character для выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°:

int readch() {

 char ch;

 if (peek_character != -1) {

  ch = peek_character;

  peek_character = -1;

  return ch;

 }

 read(0, &ch, 1);

 return ch;

}

Когда Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ (kbhit.c), Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄:

$ ./kbhit

looping

looping

looping

you hit h

looping

looping

looping

you hit d

looping

you hit q

$

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π’Π΅Ρ€ΠΌΠΈΠ½Π°Π» настраиваСтся Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ init_keyboard Π½Π° считываниС ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа (MIN=1, TIME=0). Ѐункция kbhit измСняСт это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π²Π²ΠΎΠ΄Π° ΠΈ Π΅Π³ΠΎ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ (MIN=0, TIME=0) ΠΈ Π·Π°Ρ‚Π΅ΠΌ восстанавливаСт исходныС установки ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ символ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши, Π½ΠΎ сохраняСтС Π΅Π³ΠΎ локально, Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ символ Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎ Π΅Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ консоли

ОБ Linux прСдоставляСт срСдство, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ консолями. Π­ΠΊΡ€Π°Π½, ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρƒ ΠΈ ΠΌΡ‹ΡˆΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ПК ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ряд Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… устройств, доступных Π½Π° этом ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ установка ОБ Linux рассчитана Π½Π° использованиС ΠΎΡ‚ 8 Π΄ΠΎ 12 Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… консолСй. Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ консоли становятся доступными благодаря ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ устройствам /dev/ttyN, Π³Π΄Π΅ N β€” Π½ΠΎΠΌΠ΅Ρ€, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉΡΡ с 1.

Если Π²Ρ‹ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ΡΡŒ Π² вашСй систСмС Linux Π² тСкстовом Ρ€Π΅ΠΆΠΈΠΌΠ΅, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ систСма активизируСтся, Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ рСгистрационноС ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅. Π”Π°Π»Π΅Π΅ Π²Ρ‹ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ΡΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ пароля. Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ Π²Π°ΠΌΠΈ устройство β€” пСрвая Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ консоль, Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ устройство /dev/tty1.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄ who ΠΈ ps Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΡ‚ΠΎ зарСгистрировался ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π° этой Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ консоли:

$ who

neil tty1 Mar 8 18:27

$ ps -e

 PID TTY      TIME CMD

1092 tty1 00:00:00 login

1414 tty1 00:00:00 bash

1431 tty1 00:00:00 emacs

Из этого ΡƒΠΊΠΎΡ€ΠΎΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π° Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ neil зарСгистрировался ΠΈ запустил Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Emacs Π½Π° консоли ПК, устройствС /dev/tty1.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ОБ Linux запускаСтся с процСссом getty, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΌΡΡ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΡˆΠ΅ΡΡ‚ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… консолях, поэтому Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡˆΠ΅ΡΡ‚ΡŒ Ρ€Π°Π·, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ экран, ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρƒ ΠΈ ΠΌΡ‹ΡˆΡŒ. Π£Π²ΠΈΠ΄Π΅Ρ‚ΡŒ эти процСссы ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ps:

$ ps -Π°

 PID TTY      TIME CMD

1092 tty1 00:00:00 login

1093 tty2 00:00:00 mingetty

1094 tty3 00:00:00 mingetty

1095 tty4 00:00:00 mingetty

1096 tty5 00:00:00 mingetty

1097 tty6 00:00:00 mingetty

Π’ этом Π²Ρ‹Π²ΠΎΠ΄Π΅ прСдставлСн стандартный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ getty для обслуТивания консоли Π² систСмС SUSE, mingetty, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉΡΡ Π½Π° пяти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… консолях ΠΈ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠΉ рСгистрации ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ консолями ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ клавиш <Ctrl>+<Alt>+<FN>, Π³Π΄Π΅ N β€” Π½ΠΎΠΌΠ΅Ρ€ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ консоли, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° Π²Ρ‚ΠΎΡ€ΡƒΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ консоль, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ <Ctrl>+<Alt>+<F2>, ΠΈ <Ctrl>+<Alt>+<F1>, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π½Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ консоль. (ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΈΠ· рСгистрации Π² тСкстовом Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π° Π½Π΅ графичСском, Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ комбинация клавиш <Ctrl>+<FN>.)

Если Π² Linux Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° рСгистрация Π² графичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π»ΠΈΠ±ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ startx ΠΈΠ»Π½ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° экранов xdm, Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ свободной консоли, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ /dev/tty7, стартуСт графичСская ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° X Window System. ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ с Π½Π΅Π΅ Π½Π° Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ, консоль Π²Ρ‹ смоТСтС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ клавиш <Ctrl>+<Alt>+<FN>, Π° Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ <Ctrl>+<Alt>+<F7>.

Π’ ОБ Linux ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСанса X. Если Π²Ρ‹ сдСлаСтС это, скаТСм, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

$ startx -- :1

Linux запустит сСрвСр X Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ свободной Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ консоли, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π½Π° /dev/tty8, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π²Ρ‹ смоТСтС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ клавиш <Ctrl>+<Alt>+<F8> ΠΈ <Ctrl>+<Alt>+<F7>.

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

ΠŸΡΠ΅Π²Π΄ΠΎΡ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρ‹

Π£ ΠΌΠ½ΠΎΠ³ΠΈΡ… UNIX-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… систСм, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Linux, Π΅ΡΡ‚ΡŒ срСдство, ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌΠΎΠ΅ псСвдотСрминалом. Π­Ρ‚ΠΎ устройства, ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ использовали Π² Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ Π½ΠΈΡ… Π½Π΅Ρ‚ связанного с Π½ΠΈΠΌΠΈ оборудования. Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для прСдоставлСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ интСрфСйса Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ.

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

Одно врСмя рСализация псСвдотСрминалов (Ссли Π²ΠΎΠΎΠ±Ρ‰Π΅ сущСствовала) сильно зависСла ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ систСмы. БСйчас ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² стандарт Single UNIX Specification (Π΅Π΄ΠΈΠ½Ρ‹ΠΉ стандарт UNIX) ΠΊΠ°ΠΊ UNIX98 Pseudo-Terminals (псСвдотСрминалы стандарта UNIX98) ΠΈΠ»ΠΈ PTY.

РСзюмС 

Π’ этой Π³Π»Π°Π²Π΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ ΠΎ Ρ‚Ρ€Π΅Ρ… аспСктах управлСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠΌ. Π’ Π½Π°Ρ‡Π°Π»Π΅ Π³Π»Π°Π²Ρ‹ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΎΡΡŒ ΠΎΠ± ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ пСрСнаправлСния ΠΈ способах прямого Π΄ΠΈΠ°Π»ΠΎΠ³Π° с Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠΌ Π² случаС пСрСнаправлСния дСскрипторов стандартных Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Ρ‹ посмотрСли Π½Π° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΡƒΡŽ модСль Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ познакомились с Π΅Π³ΠΎ историСй. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ ΠΎΠ± ΠΎΠ±Ρ‰Π΅ΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ интСрфСйсС ΠΈ структурС termios, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ Π² ОБ Linux Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ½ΠΊΠΎΠ³ΠΎ управлСния ΠΈ манипулирования Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠΌ. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… terminfo ΠΈ связанныС с Π½Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для управлСния Π² Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎ-нСзависимом стилС Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ Π½Π° экран, ΠΈ познакомились с ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌΠΈ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠ³ΠΎ обнаруТСния Π½Π°ΠΆΠ°Ρ‚ΠΈΠΉ клавиш. Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… консолях ΠΈ псСвдотСрминалах. 

Π“Π»Π°Π²Π° 6

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ тСкстовыми экранами с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ curses

Π’ Π³Π»Π°Π²Π΅ 5 Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄ΠΎΠΌ символов ΠΈ ΠΊΠ°ΠΊ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ символов способом, Π½Π΅ зависящим ΠΎΡ‚ особСнностСй ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° использования ΠΎΠ±Ρ‰Π΅Π³ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ интСрфСйса (GTI ΠΈΠ»ΠΈ termios) ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ tparm ΠΈ родствСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² нСобходимости примСнСния большого объСма ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня. Для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅ΠΉ интСрфСйс высокого уровня. ΠœΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ просто Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π½Π° экранС ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для автоматичСского отслСТивания Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… характСристик Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°.