Посилаючись на це запитання: /server/534449
Як cat /dev/urandom
змушують деякі емулятори терміналів вигравати?
Посилаючись на це запитання: /server/534449
Як cat /dev/urandom
змушують деякі емулятори терміналів вигравати?
Відповіді:
Незважаючи на те, що звичайні символи ASCII для друку надсилаються туди-сюди на терміналі, також є багато недрукованих символів, які використовуються для зв'язку системи з терміналом. Наприклад, якщо програма надсилає символ 0x07
("ASCII Bell символ"), ваш термінал повинен подати звуковий сигнал.
Інші спеціальні послідовності можуть бути використані для зміни кольору тексту, що відображається, у якому напрямку воно відображається, назва вікна, розмір вікна тощо, серед багатьох інших речей.
Коли ти
cat /dev/urandom
Купа випадкових символів скидається на ваш термінал, і термінал не може сказати, що це не реальні контрольні коди.
Оскільки програма ефективно надсилає випадкові команди до терміналу, термінал виявляється у випадковому, часто непридатному стані.
Деякі з випадкових результатів будуть кодами аварійних відхилень ANSI ( http://en.wikipedia.org/wiki/ANSI_escape_code ), які можуть робити цікаві речі, як приховати курсор або вибрати альтернативні шрифти. Іншою можливістю є послідовності unicode: Випадковий байтовий потік не буде дійсним UTF-8, і, ймовірно, не всі термінали, котрі знають, що знають код, витончено справляються з цим.
cat /dev/urandom
дасть вам потік випадкових байтів між, 0
і 255
не всі ці значення є дійсними текстовими символами. Оскільки вікно терміналу подавали недійсні дані, ніколи не очікувалося, що це обробляє, воно може привести термінальну програму до "зламаного" стану.