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

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

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

21.4. ΠŸΡ€ΡΠΌΠΎΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ способности Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ символы Π½Π° экран Π½Π΅ являСтся достаточным. Частично это связано с Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС экрана. Π’ систСмС Unix принята стандартная ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° β€” состояниС экрана игнорируСтся. Если Π½ΡƒΠΆΠ½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ настройки экрана, ΠΏΡ€ΠΈ появлСнии нСобходимости внСсти Π² Π½ΠΈΡ… измСнСния, послС Ρ‡Π΅Π³ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ экран всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° этого Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ (ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ^L). МоТно ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ примСнСния.

Π’ частности, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для фиксирования ΠΈ восстановлСния экрана, трСбуСтся доступ ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ содСрТимому экрана. БистСма Linux прСдоставляСт Ρ‚Π°ΠΊΠΎΠΉ доступ Ρ‡Π΅Ρ€Π΅Π· Π΄Π²Π° интСрфСйса. Один ΠΈΠ· Π½ΠΈΡ… ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ тСкстовоС содСрТимоС экрана, Π²Ρ‚ΠΎΡ€ΠΎΠΉ содСрТит Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ (Ρ†Π²Π΅Ρ‚ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅).

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ тСкстовый ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ носит Π½Π°Π·Π²Π°Π½ΠΈΠ΅ vcs, Ρ‡Ρ‚ΠΎ, вСроятно, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ virtual console screen (экран Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ консоли)[155]. Π§Ρ‚Π΅Π½ΠΈΠ΅ устройства /dev/vcs0 Π΄Π°Π΅Ρ‚ содСрТимоС Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ консоли, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ выглядит Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ чтСния. Если экран Π² настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡Π΅Π½ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ экрана Π½Π°Π·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½Ρ‹Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ <Control+PageUp> ΠΈ <Control+PageDown>), устройство /dev/vcs0 содСрТит ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ содСрТимоС, Π²ΠΈΠ΄ΠΈΠΌΠΎΠ΅ Π½Π° экранС. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ устройства vcs, /dev/vcsn, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ консоли n ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ доступны Ρ‡Π΅Ρ€Π΅Π· /dev/ttyn.

ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° /dev/vcs* Π½Π΅ даСтся Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΉ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΠΎΠ²Ρ‹Ρ… строк ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° консоли, ΠΊΡ€ΠΎΠΌΠ΅ ΠΌΠ΅Ρ‚ΠΊΠΈ EOF Π² ΠΊΠΎΠ½Ρ†Π΅ экрана. Если Π²Ρ‹ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ 2000 Π±Π°ΠΉΡ‚ ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ EOF, Π²Ρ‹ Π½Π΅ смоТСтС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ экрана: ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, ΠΎΠ½ содСрТит 80 столбцов ΠΈ 25 строк, Π°, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, 40 столбцов ΠΈ 50 строк. Для ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΊΠΎΠ½Ρ†Π° строк Π½Π΅ выводятся символы Π½ΠΎΠ²ΠΎΠΉ строки, ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ каТдая пустая символьная ячСйка (нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π·Π°ΠΏΠΈΡΡ‹Π²Π°Π»Π°ΡΡŒ Π»ΠΈ Π² Π½Π΅Π΅ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ информация) обозначаСтся символом ΠΏΡ€ΠΎΠ±Π΅Π»Π°. БущСствуСт нСсколько популярных ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ экрана, ΠΈ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ каТдая ΠΈΠ· Π½ΠΈΡ… ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ΅ количСство строк ΠΈ столбцов. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ vcs ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π»Π΅Π³ΠΊΠΈΠΉ способ для Π½Π°Ρ…ΠΎΠ΄Ρ‡ΠΈΠ²Ρ‹Ρ… систСмных администраторов ΠΈΠ»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ содСрТимоС любой Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ консоли. Однако ΠΎΠ½ Π½Π΅ особСнно ΠΏΠΎΠ»Π΅Π·Π΅Π½ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния программистов, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π±Π΅Π· постороннСй ΠΏΠΎΠΌΠΎΡ‰ΠΈ.

Один ΠΈΠ· ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… способов β€” это использованиС vcs ΠΈΠ· X. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ XFree86 запускаСт X-сСрвСр Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ свободной Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ консоли, Π½ΠΎ Π½Π΅ Π½Π° Ρ‚ΠΎΠΉ консоли, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π»Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Если Π²Ρ‹ запускаСтС XFree86 ΠΈΠ· Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ консоли 1, Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π² консоль 1 для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ рСгистрационныС сообщСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ XFree86 Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран. ΠŸΡ€ΠΎΡΡ‚ΠΎ пСрСнСситС Π½Π°Π²Π΅Ρ€Ρ… ΠΎΠΊΠ½ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ самого Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Ρ‡Ρ‚ΠΎ ΠΈ консоль (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ 80 столбцов Π½Π° 25 строк), Π²ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² систСму ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ (для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ vcs) ΠΈ запуститС cat /dev/vcs1. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ консоли Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ вашС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Π°ΠΌ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π½ΡƒΠΆΠ½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ свСдСния ΠΎ состоянии экрана, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ прСдоставляСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ vcs.

β€’ Π¦Π²Π΅Ρ‚Π°.

β€’ Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ΅Ρ€Ρ†Π°Π½ΠΈΠ΅).

β€’ Π’Скущая позиция курсора.

β€’ ΠšΠΎΠ½Ρ„игурация экрана (количСство строк ΠΈ столбцов).

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ vcsΠ° (Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ virtual console screen with attributes β€” экран Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ консоли с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ) прСдоставляСт всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π° /dev/vcsan (для Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ самого значСния n, Ρ‡Ρ‚ΠΎ ΠΈ Π² vcs) содСрТат Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ курсора ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ экрана. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π°ΠΉΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ количСство строк, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” количСство ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ β€” Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ столбСц курсора, Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ β€” Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ строку курсора. ΠžΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Π° содСрТит ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π±Π°ΠΉΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ тСкст, ΠΈ Π±Π°ΠΉΡ‚Ρ‹ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² тСкста Π΄Π°Π½Π½ΠΎΠΉ консоли.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли Π²Π°ΠΌ трСбуСтся Π·Π½Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ консоли ΠΈ Π΅Π΅ тСкстовоС содСрТимоС, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° Π±Π°ΠΉΡ‚Π° ΠΈΠ· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° vcsa, Π° послС этого Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ vcs. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ курсора, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΈ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ Π±Π°ΠΉΡ‚Ρ‹ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° vcsa. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° Π±Π°ΠΉΡ‚Π° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° символа ΡΠ²Π»ΡΡŽΡ‚ΡΡ просто заполнитСлями). ΠœΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ символы для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ это. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ курсора Π½Π° Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ консоли Π² Π²ΠΎΡΡŒΠΌΡƒΡŽ строку ΠΈ Π΄Π²Π΅Π½Π°Π΄Ρ†Π°Ρ‚Ρ‹ΠΉ столбСц (отсчитывая ΠΎΡ‚ нуля):

echo -n -Π΅ '..\023\007' > /dev/vcsa4

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -n ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ символа Π½ΠΎΠ²ΠΎΠΉ строки Π² ΠΊΠΎΠ½Ρ†Π΅, -Π΅ выполняСт ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄ΠΎΠ² смСны Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°, поэтому Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ \nnn трактуСтся ΠΊΠ°ΠΊ Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ символ nnn.

Атрибуты ΠΈ символьноС содСрТимоС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π±Π°ΠΉΡ‚Ρ‹, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТит символ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ для примСнСния ΠΊ этому символу. Π‘Π°ΠΉΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, опрСдСляСтся ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с Π±Π°ΠΉΡ‚ΠΎΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π½Π° ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ VGA. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ тСхничСских срСдств, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΠ°Ρ€Ρ‚Ρ‹ TGA, примСняСмыС Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… Linux/Alpha, ΠΈ ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ SPARC, ΡΠΌΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² VGA. На Π²ΠΈΠ΄Π΅ΠΎΠ°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Π΅ Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ†Π²Π΅Ρ‚Π°, Π½ΠΎ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ подчСркивания, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ нСсколько ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. Однако способ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ позволяСт Π΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΈΠ΄, Ρ‡Ρ‚ΠΎ всС ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΊΠ°ΠΊ VGA.

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π½ΠΎΠΌ Π±Π°ΠΉΡ‚Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ описано Π² Ρ‚Π°Π±Π». 21.12. Π­Ρ‚ΠΎ VGA прСдставлСниС; Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Π΅ устройства Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ ΠΌΠ΅Ρ€Ρ†Π°Π½ΠΈΠ΅ ярким Π·Π°Π΄Π½ΠΈΠΌ Ρ„ΠΎΠ½ΠΎΠΌ. ΠœΠΎΠ½ΠΎΡ…Ρ€ΠΎΠΌΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π±ΠΈΡ‚ Ρ†Π²Π΅Ρ‚Π° ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π° для указания подчСркивания.


Π’Π°Π±Π»ΠΈΡ†Π° 21.12. Атрибуты

Π‘ΠΈΡ‚ (Π±ΠΈΡ‚Ρ‹) Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ 7 ΠœΠ΅Ρ€Ρ†Π°Π½ΠΈΠ΅ 6-4 Π€ΠΎΠ½ 3 ΠŸΠΎΠ»ΡƒΠΆΠΈΡ€Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚ 2-0 ΠŸΠ΅Ρ€Π΅Π΄Π½ΠΈΠΉ ΠΏΠ»Π°Π½

Π“Π»Π°Π²Π° 22

НаписаниС Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

ΠŸΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ², Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ систСма Linux, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΊ Internet, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ большим количСством людСй. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΈ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС Π² бСзопасности, ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ ΡƒΠ³Ρ€ΠΎΠ·Ρ‹, ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· сСтСвоС соСдинСниС, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π½Π° нСсанкционированныС ΡƒΡ€ΠΎΠ²Π½ΠΈ доступа, трСбуСтся Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ основной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, Ρ‚Π°ΠΊ ΠΈ мноТСства ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π’ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ прСдлагаСтся ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Ρ‚Π΅Ρ… Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ создании Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° языкС Π‘. ΠœΡ‹ выясним, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² особом ΡƒΡ€ΠΎΠ²Π½Π΅ надСТности ΠΈ защищСнности, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ риски. ΠœΡ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° самыС ΠΎΠ±Ρ‰ΠΈΠ΅ ошибки Π² вопросС обСспСчСния бСзопасности. ВсС это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π² написаниС бСзопасных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π±ΠΎΠ»Π΅Π΅ глубокая информация, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ ΠΊΠ½ΠΈΠ³Π΅ Π”Π°Π²ΠΈΠ΄Π° Π’ΠΈΠ»Π΅Ρ€Π° (David A. Wheeler) Secure Programming for Linux and UNIX HOW TO. Π’ Π½Π΅Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ биография Π°Π²Ρ‚ΠΎΡ€Π°, Π° Π½Π°ΠΉΡ‚ΠΈ эту ΠΊΠ½ΠΈΠ³Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ адрСсу http://www.dwheeler.com/secure-programs.

22.1. Когда Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅?

ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” это ΠΎΡ‡Π΅Π½ΡŒ слоТныС Π²Π΅Ρ‰ΠΈ. Π”Π°ΠΆΠ΅ самая простая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° "Hello World" являСтся Π½Π° ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½ΠΎΠΉ. Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΡƒΡ всС, Ρ‡Ρ‚ΠΎ происходит Π² ядрС, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π‘ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡ‚Ρ‹ΡΠΊΠ°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈΡ… Π² систСму, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ стандартныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. На ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»Π°ΡΡŒ данная Π³Π»Π°Π²Π°, полная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° состояла ΠΈΠ· 25 систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Волько ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… оказался Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ write(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ использовался нСпосрСдствСнно для Π²Ρ‹Π²ΠΎΠ΄Π° слов "Hello World".

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