То, о чем вы спрашиваете, на самом деле не графический API, это просто управляющие символы терминала.
За этим стоит большая история, но в прошлом терминалы были машинами Teletype . В основном пишущая машинка с трековой бумагой, подключенная к компьютеру через последовательное соединение. Ввод символа будет отправлять это двоичное значение на компьютер (а также вводить его на странице). Компьютер будет печатать символы обратно как вывод того, что вы запросили.
Специальные символы использовались для управления терминалом (откуда берется управляющий ключ, для создания этих символов). Например, ^H
или ^?
будет ^M
возвращением каретки, это возврат каретки (перемещает курсор в начало строки) и ^J
перевод строки (переместить страницу вверх на одну строку). Некоторые управляющие коды имеют escape-последовательность в C (которая используется почти всеми языками программирования) для генерации управляющих символов. Элементы управления , перечисленные выше , были бы \b
, \r
, \n
соответственно.
Эмулятор терминала используется сегодня только то , что это звучит как, это программное обеспечение, которое притворяется старый телетайп машин. В некотором смысле, похоже, что Unix все еще думает, что вы используете пишущую машинку для связи с ним.
В случае curl
, он записывает всю строку, а затем отправляет \r
(возврат каретки), переводя курсор в начало строки, а затем записывает другую строку. Поскольку перевод строки не отправляется, он продолжает писать на одной и той же строке на экране.
Вот что вы можете попробовать продемонстрировать это:
echo -n "First" ; sleep 5 ; echo -en "\rSecond\n"
Вы увидите напечатанное слово «First» (но новая строка не отправляется). Через 5 секунд он будет заменен словом «Second» и будет отправлена новая строка. Вы можете повторять этот шаблон до бесконечности. Попробуйте добавить «Третий» самостоятельно, вы увидите то, чего вы, вероятно, не ожидали ;-)
Для получения дополнительной информации об этих и других управляющих символах см. ascii(7)
Руководство.
ncurses
.