prefacio
Hola a todos, bienvenidos a la serie YY drop Linux, ¡una cálida bienvenida! El contenido principal de este capítulo es para veteranos que han estado en contacto con Linux. El contenido principal incluye
¡Bienvenido a suscribirse a la columna YY drop Linux! ¡Más productos secos se actualizan continuamente! ¡El siguiente es el portal!
Suscríbete a la columna que lee: Serie "Linux" de YY❀❀❀❀❀ |
---|
【Linux Series-P1】Construyendo un entorno Linux |
[Linux Series-P2] Conocimientos básicos e instrucciones de Linux |
【Serie Linux-P3】Permisos de Linux |
[Linux series-P4] Herramientas básicas de Linux [yum] [vim] |
Tabla de contenido
- 1. Configuración en Linux
- 2. Conceptos esenciales
- 3. Diseña las distintas partes de la barra de progreso
- 4. El código completo de la barra de progreso.
1. Configuración en Linux
- Use vim para crear [main.c] [makefile] [processbar] [processBar.c] [processbar.h], que se puede configurar según la situación específica, y hay un breve código al final del artículo;
- El archivo makefile se muestra en la figura
> - ./processbar Ejecutar el programa
Detalles: ¿por qué no incluir el archivo de encabezado en el archivo MAKE?
- El archivo de encabezado está en el directorio actual del código fuente y el compilador encontrará automáticamente el archivo de encabezado.
2. Conceptos esenciales
1. La diferencia entre retorno de carro y salto de línea
- Enter: el cursor vuelve al extremo izquierdo de la línea actual
- Nueva línea: salta a la siguiente línea actual
- PD: Ahora el ENTER de nuestro teclado tiene las funciones de retorno de carro y avance de línea al mismo tiempo .
- En lenguaje C, "\n" significa retorno de carro más avance de línea, y "\r" simplemente se refiere a retorno de carro;
2. Concepto de amortiguación
Introducción: Un búfer es un segmento de memoria mantenido por el lenguaje C
El lenguaje C abrirá tres archivos de entrada y salida de forma predeterminada, a saber, el flujo de entrada estándar stdin, el flujo de salida estándar stdout y el error estándar stderr
En el subprograma de la barra de progreso, debemos prestar especial atención a la salida estándar del flujo de salida estándar.
1. Diferencias en los efectos de "\n" y "\r" en el búfer
- Como todos sabemos, en Linux, una pantalla puede tratarse como un archivo;
- Y la pantalla se actualiza de forma predeterminada , es decir, cuando el contenido de salida coincide con "\n", ingresará directamente + avance de línea e imprimirá el contenido en la pantalla inmediatamente, y el cuadro de operación aparecerá después de que termine la suspensión;
- Y cuando el contenido de salida coincida con "\r", se enviará primero al búfer y se enviará junto con el cuadro de operación después de que finalice la suspensión ;
#include <stdio.h>
int main()
{
printf("hello Makefile!\n");先行打印,待睡眠结束后才弹出操作框
sleep(3);
return 0;
printf("hello Makefile!\r");待睡眠结束后才会和操作框一起打印
}
Función Two.fflush
- fflush es una función en la biblioteca de entrada y salida estándar del lenguaje C. Su función es vaciar la información en la secuencia.Esta función se usa generalmente para procesar archivos de disco. fflush() obligará a que los datos del búfer se vuelvan a escribir en el archivo especificado por el flujo de parámetros.
- En el siguiente bloque de código, debería aparecer "¡Hola Makefile!" con el cuadro de operación después de que finalice la suspensión y almacenarse en el búfer antes de eso, pero usamos fflush(stdout); (stdout es su tipo de datos) para escribir directamente el contenido del búfer de vuelta al archivo de visualización;
- El efecto final es: imprima primero, y el cuadro de operación aparecerá después de que termine la suspensión
#include <stdio.h>
int main()
{
printf("hello Makefile!\r");
fflush(stdout);
sleep(3);
return 0;
}
3. Aplicación de la función fflush: función de cuenta regresiva
1. El principio de realización de la función de cuenta regresiva.
- Use retorno de carro continuo y actualice para lograr
2. Detalles de representación de tipos de datos
- Mostrar números de 2 dígitos printf("%2d\r", cnt);
- En este momento, la función es normal [10, 9, 8...1, 0]
- Alinear a la izquierda printf(“%-2d\r”, cnt);
3. El código completo de la función de cuenta regresiva.
#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. Diseña las distintas partes de la barra de progreso
1. Diseña la parte principal de la barra de progreso
1. Reserve espacio para la barra de progreso al imprimir
- Diseñe una matriz de caracteres e inicialícela, en este momento es una cadena vacía ;
memset(bar, 0 ,sizeof(bar));
2. Ajuste la dirección de carga del cuerpo principal de la barra de progreso
- En el entorno Linux, la línea está alineada a la derecha de forma predeterminada, por lo que con el retorno de carro y el salto de línea continuos, el efecto de la barra de progreso es moverse de derecha a izquierda;
- Solo tenemos que cambiar a [%-100s]
printf("[%-100s]\r", bar);
3. Código de la parte principal de la barra de progreso
#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. Diseña la parte de progreso porcentual
1. Detalles del diseño: "Cómo representar %"
- Detalles: dado que [% + '' letra es el tipo de datos], la barra inclinada [%] está representada por [%%]
2. Principio de implementación
- mientras bucle
int main()
{
int i = 0;
while(i <= 100 )
{
printf("[%d%%]",i);
fflush(stdout);
}
return 0;
}
3. Diseña la parte del cursor giratorio
1. Detalles del diseño: "\ Cómo representar"
- Detalles: dado que [\ +'' es un carácter de escape], la barra inclinada [\] está representada por [\\]
2. Principio de implementación
- La cadena constante coincide con [i++% 4]
- [-r Enter] + [fflush refresh icon]; La siguiente ronda del bucle while sobrescribe directamente los caracteres originales para realizar la rotación del cursor;
int main()
{
int i = 0;
const char *lable="|/-\\";
while(i <= 100 )
{
printf("[%c]\r",lable[i++%4]);
fflush(stdout);
}
}
4. El código completo de la barra de progreso.
#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;
}