предисловие
Привет всем, добро пожаловать в серию YY drop Linux, теплый прием! Основное содержание этой главы предназначено для ветеранов, имевших дело с Linux.
Добро пожаловать, чтобы подписаться на колонку YY drop Linux! Больше галантереи постоянно обновляется! Ниже портал!
Подпишитесь на колонку, читающую: серия YY "Linux"❀❀❀❀❀ |
---|
【Linux Series-P1】Создание среды Linux |
[Linux Series-P2] Базовые знания и инструкции по Linux |
【Linux Series-P3】Разрешения Linux |
[Серия Linux-P4] Основные инструменты Linux [yum] [vim] |
Оглавление
- 1. Настройки в Linux
- 2. Основные понятия
- 3. Создайте различные части индикатора выполнения
- 4. Полный код индикатора выполнения
1. Настройки в Linux
- Используйте vim для создания [main.c] [makefile] [processbar] [processBar.c] [processbar.h], которые можно настроить в соответствии с конкретной ситуацией, а в конце статьи есть краткий код;
- Файл makefile показан на рисунке
> - ./processbar Выполнить программу
Подробности: почему бы не включить заголовочный файл в makefile?
- Заголовочный файл находится в текущем каталоге исходного кода, и компилятор автоматически найдет заголовочный файл.
2. Основные понятия
1. Разница между возвратом каретки и переводом строки
- Enter: курсор возвращается в левый конец текущей строки
- Новая строка: перейти к текущей следующей строке
- PS: Теперь клавиша ENTER на нашей клавиатуре одновременно выполняет функции возврата каретки и перевода строки .
- В языке C "\n" означает возврат каретки плюс перевод строки, а "\r" просто означает возврат каретки;
2. Концепция буфера
Введение: буфер — это сегмент памяти, поддерживаемый языком C.
Язык C по умолчанию открывает три файла ввода и вывода, а именно стандартный поток ввода stdin, стандартный поток вывода stdout и стандартную ошибку stderr.
В апплете индикатора выполнения мы должны обратить особое внимание на стандартный поток вывода stdout.
1. Различия в эффектах "\n" и "\r" в буфере
- Как мы все знаем, в Linux отображение можно рассматривать как файл;
- И дисплей по умолчанию обновляет строку , то есть, когда выходной контент соответствует «\n», он будет напрямую вводить + перевод строки и немедленно печатать контент на экране, а окно операции появится после окончания сна;
- И когда выходное содержимое соответствует "\r", оно сначала будет выведено в буфер, а после завершения сна будет выведено вместе с полем операции ;
#include <stdio.h>
int main()
{
printf("hello Makefile!\n");先行打印,待睡眠结束后才弹出操作框
sleep(3);
return 0;
printf("hello Makefile!\r");待睡眠结束后才会和操作框一起打印
}
Функция Two.fflush
- fflush — это функция в стандартной библиотеке ввода-вывода языка C. Ее функция — сбрасывать информацию в потоке.Эта функция обычно используется для обработки файлов на диске. fflush() принудительно запишет данные из буфера обратно в файл, указанный потоком параметров.
- В следующем блоке кода «hello Makefile!» должно быть выведено с окном операции после окончания сна и сохранено в буфере перед этим; но мы использовали fflush(stdout); (stdout — его тип данных) для прямой записи содержимого из буфера обратно в файл отображения;
- Конечный эффект: сначала распечатайте, а окно операции появится после окончания сна.
#include <stdio.h>
int main()
{
printf("hello Makefile!\r");
fflush(stdout);
sleep(3);
return 0;
}
3. Применение функции fflush: функция обратного отсчета
1. Принцип реализации функции обратного отсчета
- Используйте непрерывный возврат каретки и обновление для достижения
2. Детали представления типов данных
- Вывести двузначные числа printf("%2d\r", cnt);
- В это время функция нормальная [10, 9, 8...1, 0]
- Выровнять по левому краю printf("%-2d\r", cnt);
3. Полный код функции обратного отсчета
#include <stdio.h>
#include <unistd.h>
int main()
{
int cnt=10;倒计时功能
while(cnt>=0)
{
printf("%d\r",cnt); 此时屏幕出现【10,90,80...10,00】,功能异常;
fflush(stdout);
cut--;
sleep(1);
}
return 0;
}
3. Создайте различные части индикатора выполнения
1. Дизайн основной части индикатора выполнения
1. Зарезервируйте место для индикатора выполнения при печати
- Создайте массив символов и инициализируйте его, на данный момент это пустая строка ;
memset(bar, 0 ,sizeof(bar));
2. Отрегулируйте направление загрузки основной части индикатора выполнения.
- В среде Linux строка по умолчанию выравнивается по правому краю, поэтому с непрерывным возвратом каретки и переводом строки эффект индикатора выполнения заключается в перемещении справа налево;
- Нам просто нужно изменить на [%-100s]
printf("[%-100s]\r", bar);
3. Код основной части прогресс бара
#include <unistd.h>
int main()
{
int i = 0;
char bar[102];
memset(bar, 0 ,sizeof(bar));
while(i <= 100 )
{
printf("[%-100s]\r", bar);
fflush(stdout);
bar[i++] = '#';
usleep(10000);
}
}
2. Создайте процентную часть прогресса
1. Детали дизайна: «Как представить %»
- Подробности: поскольку [% + '' буква является типом данных], косая черта [%] представлена [%%]
2. Принцип реализации
- пока цикл
int main()
{
int i = 0;
while(i <= 100 )
{
printf("[%d%%]",i);
fflush(stdout);
}
return 0;
}
3. Создайте вращающуюся часть курсора
1. Детали дизайна: "\ Как изобразить"
- Подробности: поскольку [\ +'' является escape-символом, косая черта [\] представлена как [\\]
2. Принцип реализации
- Строка-константа соответствует [ i++% 4 ]
- [-r Enter] + [значок обновления fflush] Следующий раунд цикла while напрямую перезаписывает исходные символы, чтобы реализовать вращение курсора;
int main()
{
int i = 0;
const char *lable="|/-\\";
while(i <= 100 )
{
printf("[%c]\r",lable[i++%4]);
fflush(stdout);
}
}
4. Полный код индикатора выполнения
#include <unistd.h>
#include <string.h>
int main()
{
int i = 0;
char bar[102];
memset(bar, 0 ,sizeof(bar));
const char *lable="|/-\\";
while(i <= 100 )
{
printf("[%-100s][%d%%][%c]\r", bar, i, lable[i%4]);
fflush(stdout);
bar[i++] = '#';
usleep(10000);
}
printf("\n");
return 0;
}