Виртуальные консоли Linux эмулируют старый дисплейный терминал, хотя и не идеально.См. Wikipedia на VT-100 для примера аппаратного обеспечения.
Эти терминалы считывают данные с последовательного порта и отображают их на экране.Они также искали специальные байты во входном потоке от последовательного порта и действовали на них другими способами.Например, символ перевода строки ('\ n', значение байта 10) будет идти в начало следующей строки, а символ возврата каретки ('\ r', значение байта 13) будет идти в начало текущей строки.
Что еще интереснее, байт ASCII ESC (27) запускает последовательность команд, которая может почти что угодно для курсора или дисплея.Одна такая последовательность может перемещать курсор в верхний левый угол экрана, другая - в заданную строку и столбец.Третий может очистить экран, а четвертый может заставить текст отображаться в обратном цвете.
Каждый производитель терминалов изобрел свои собственные последовательности команд (и они не всегда начинали с ESC),а затем измените их в зависимости от того, что они могут заставить делать новые версии своего оборудования.Если производитель добавил цвета или простую графику, это привело к новым последовательностям.
Адаптация каждого приложения к каждому терминалу и каждое изменение последовательностей команд было бы большой задачей.Сравните это с адаптацией каждого веб-приложения к новой версии браузера.
Как обычно, решение заключается в добавлении слоя абстракции.В Unix начальная абстракция называлась termcap
и состояла из файла /etc/termcap
и библиотеки для чтения файла.В файле будут указаны фактические последовательности команд, которые нужно отправить для каждой логической операции для каждой модели терминала.Таким образом, модель терминала vt102
отобразит операцию «очистить экран» в \033[2J
.Это позволило прикладным программистам мыслить в терминах логических операций, что было намного проще.
Конечно, не достаточно просто ... Библиотека termcap была не так хороша, как могла бы быть, поэтому две другие библиотекибыли разработаны: curses
предоставил более высокий уровень абстракции, включая пользовательский ввод, а terminfo упростила определения терминалов и их использование программистами.
В наше время ncurses
- это бесплатная повторная реализация curses
и terminfo
почти полностью заменили termcap
.Кроме того, ANSI определил некоторые «стандартные» последовательности на основе цифровых терминалов, и почти каждый эмулятор терминала использует их, по крайней мере, в основном, и виртуальная консоль Linux является одной из них.Очень немногие люди уже имеют реальные физические терминалы.
Для того, что вы пытаетесь сделать, команда ncurses
или tput
может быть наиболее полезной.Или вы можете решить, что просто очистить весь экран (см. clear
(1)) и записать вывод в таком случае проще всего.