Подтвердить что ты не робот

Очистка терминала в Linux с помощью кода на С++

Хорошо, я изучал, как это сделать, но скажу, что я запускаю программу, которая имеет весь вывод на терминале, как я могу очистить экран от своей программы, чтобы я мог сохранить свою программу работает?

Я знаю, что могу просто набрать clear в терминале, и он очищает его в порядке, но, как я уже сказал, для этой программы это было бы более выгодно для меня.

Я нашел что-то, что работает, однако я не уверен, что это такое или что он делает.

cout << "\033[2J\033[1;1H";

Это работает, но я не знаю, что это такое, если бы вы могли это объяснить, чем я был бы очень признателен.

4b9b3361

Ответ 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