Очистка терминала в Linux с помощью кода на С++
Хорошо, я изучал, как это сделать, но скажу, что я запускаю программу, которая имеет весь вывод на терминале, как я могу очистить экран от своей программы, чтобы я мог сохранить свою программу работает?
Я знаю, что могу просто набрать clear
в терминале, и он очищает его в порядке, но, как я уже сказал, для этой программы это было бы более выгодно для меня.
Я нашел что-то, что работает, однако я не уверен, что это такое или что он делает.
cout << "\033[2J\033[1;1H";
Это работает, но я не знаю, что это такое, если бы вы могли это объяснить, чем я был бы очень признателен.
Ответы
Ответ 1
Это коды отмены ANSI. Первый (\033[2J
) очищает весь экран (J
) сверху вниз (2
). Второй код (\033[1;1H
) помещает курсор в строку 1
, столбец 1
.
Все пропуски ANSI начинаются с последовательности ESC [, имеют ноль или более параметров, разделенных символом ;, и заканчиваются буквой команды (J и H в вашем случае). \033
- это восьмеричная последовательность C-стиля для escape-символа.
Смотрите здесь для полного roadshow.
Ответ 2
Вместо того, чтобы зависать от определенных escape-последовательностей, которые могут ломаться в неожиданных ситуациях (хотя принятие этого компромисса в порядке, если оно вам нужно), вы можете просто сделать то же самое, что и в своей оболочке:
std::system("clear");
Хотя обычно следует избегать системы(), для пользовательско-интерактивной программы не требуется значительная разборка синтаксиса или служебные данные процесса. В этом случае нет проблем с экранированием оболочки.
Вы всегда можете использовать fork/exec для вызова clear, если вы хотите избежать system(). Если вы уже используете [n] curses или другую библиотеку терминалов, используйте это.
Ответ 3
Для переносимости вы должны получить строку из функции termcap cl (clear) (Очистить экран и курсор дома). (Или используйте std:: system ( "clear" ), как сказал Роджер Пате).
человек 3 termcap (в ncurses)
мужчина 5 termcap
набор | grep TERMCAP