Очистка вывода терминальной программы C/C++ Linux

Что касается того, когда использовать один по другому, возьмите, например, эти fwrite() функция в PHP.

Эта функция пишет содержание в поток файла. Согласно PHP, "fwrite() возвраты число записанных байтов, или ЛОЖНЫХ на ошибке".. Если Вы хотите протестировать, если вызов функции был успешен, этот метод испорчен:

if (!fwrite(stuff))
{
    log('error!');
}

Это может возвратить нуль (и считается успешным), и Ваше условие все еще инициировано. Правильный путь был бы:

if (fwrite(stuff) === FALSE)
{
    log('error!');
}
20
задан ldog 28 August 2009 в 18:09
поделиться

6 ответов

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

#include <stdio.h>

int
main ()
{
    fputs("output1\n",stdout);
    fputs("output2\n",stdout);
    fputs("\033[A\033[2K\033[A\033[2K",stdout);
    rewind(stdout);
    ftruncate(1,0); /* you probably want this as well */
    fputs("output3\n",stdout);
    fputs("output4\n",stdout);
    return 0;
}
23
ответ дан 29 November 2019 в 22:38
поделиться

Most terminals support ANSI escape codes. You can use a J (with parameter 2) to clear the screen and an H (with parameters 1,1) to reset the cursor to the top-left:

printf("\033[2J\033[1;1H");

Alternatively, a more portable solution would be to use a library such as ncurses, which abstracts away the terminal-specific details.

18
ответ дан 29 November 2019 в 22:38
поделиться

После того, как вы напечатали что-то на терминале, вы не сможете легко это удалить. Вы можете очистить экран, но как именно это сделать, зависит от типа терминала, а очистка экрана приведет к удалению всего текста с экрана, а не только того, что вы напечатали.

Если вам действительно нужен точный контроль над выводом на экран, используйте библиотека наподобие ncurses .

17
ответ дан 29 November 2019 в 22:38
поделиться

Что касается C, stdout - это не что иное, как поток байтов. Этот поток может быть подключен к ЭЛТ (или плоскому экрану), или он может быть подключен к устройству для копирования, например телетайпу или даже к полистному принтеру. Вызов перемотки в потоке не обязательно отразится на устройстве вывода, потому что это может не иметь никакого смысла в контексте этого устройства; подумайте о том, что будет означать перемотка на печатном терминале или листовом принтере.

C не предлагает встроенной поддержки для управления отображением, поэтому вам придется использовать стороннюю библиотеку, например ncurses.

4
ответ дан 29 November 2019 в 22:38
поделиться

Один из способов - выполнить exec ('clear').

3
ответ дан 29 November 2019 в 22:38
поделиться

Фактически, когда вы захватываете / перенаправляете свой stdout (./program> output.file), нет способа удалить содержимое этого файла, даже printf ("\ 033 [2J \ 033 [1; 1H "); просто добавляет в него эту последовательность символов.

3
ответ дан 29 November 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: