Clearing del terminale in Linux con codice C ++

Okay, ho fatto delle ricerche su come farlo, ma dico che sto eseguendo un programma che ha un po ‘di output sul terminale, come potrei cancellare lo schermo dal mio programma in modo da poter mantenere il mio programma in esecuzione?

So che posso semplicemente digitare clear in terminal e lo cancella bene, ma come ho detto, per questo programma sarebbe più vantaggioso per me.

Ho trovato qualcosa che funziona, tuttavia, non sono sicuro di cosa sia o cosa stia facendo.

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

Funziona ma non ho idea di cosa sia, se potessi spiegarlo, di quanto lo apprezzerei molto.

Questi sono i codici di escape ANSI. Il primo ( \033[2J ) cancella l’intero schermo ( J ) dall’alto verso il basso ( 2 ). Il secondo codice ( \033[1;1H ) posiziona il cursore sulla riga 1 , colonna 1 .

Tutti gli escape ANSI iniziano con la sequenza ESC [ , hanno zero o più parametri delimitati da ; e termina con una lettera di comando ( J e H nel tuo caso). \033 è la sequenza ottale in stile C per il carattere di escape.

Vedi qui per il roadshow completo.

Invece di dipendere da specifiche sequenze di escape che potrebbero rompersi in situazioni inaspettate (anche se accettando che il trade-off va bene, se è quello che vuoi), puoi semplicemente fare la stessa cosa che faresti nella shell:

 std::system("clear"); 

Sebbene in genere sia evitato system (), per un programma interattivo per l’utente né l’analisi della shell aggiuntiva né l’overhead del processo sono significativi. In questo caso, non c’è alcun problema con l’escaping della shell.

È sempre ansible eseguire fork / exec per chiamare clear se si desidera evitare system (). Se stai già utilizzando [n] curses o un’altra libreria di terminale, usa quello.

Per la portabilità si dovrebbe ottenere la stringa dalla capacità cl (clear) di termcap (Clear screen e cursor home). (Oppure usa std :: system (“clear”) come detto da Roger Pate).

man 3 termcap (in ncurses)
uomo 5 termcap
set | grep TERMCAP