Imprima el cursor de hilatura en una aplicación de ejecución de terminal usando C

¿Cómo puedo imprimir un cursor de hilado en una utilidad que se ejecuta en un terminal utilizando el estándar C?

Estoy buscando algo que imprima: \ | / – ¿Una y otra vez en la misma posición en la pantalla?

Gracias

Podría usar el carácter de retroceso ( \b ) así:

 printf("processing... |"); fflush(stdout); // do something printf("\b/"); fflush(stdout); // do some more printf("\b-"); fflush(stdout); 

etc. Necesitas el fflush(stdout) porque normalmente stdout se almacena en búfer hasta que se genera una nueva línea.

Aquí hay un código de ejemplo. Llame a advance_cursor () de vez en cuando mientras se completa la tarea.

 #include  void advance_cursor() { static int pos=0; char cursor[4]={'/','-','\\','|'}; printf("%c\b", cursor[pos]); fflush(stdout); pos = (pos+1) % 4; } int main(int argc, char **argv) { int i; for (i=0; i<100; i++) { advance_cursor(); usleep(100000); } printf("\n"); return 0; } 

Lo he hecho, hace mucho tiempo. Hay dos maneras.

  1. Use una biblioteca como ncurses para darle control sobre el terminal. Esto funciona bien si quieres hacer un montón de este tipo de cosas. Si solo una esta en un lugar pequeño, obviamente es una exageración.

  2. Imprimir un carácter de control.

Primero imprime “/”, luego 0x08 (retroceso), luego “-“, luego 0x08, luego “\” ….

El carácter de retroceso mueve la posición del cursor un espacio hacia atrás, pero deja el carácter actual allí hasta que lo sobrescriba. Obtén el tiempo correcto (para que no gire demasiado rápido o lento) y estás dorado.

También puedes usar \ r :

 #include  #include  void advance_spinner() { static char bars[] = { '/', '-', '\\', '|' }; static int nbars = sizeof(bars) / sizeof(char); static int pos = 0; printf("%c\r", bars[pos]); fflush(stdout); pos = (pos + 1) % nbars; } int main() { while (1) { advance_spinner(); usleep(300); } return 0; } 

No hay una manera realmente “estándar” de hacer esto, ya que la biblioteca estándar de C ( http://members.aol.com/wantondeb/ ) no proporciona funciones para hacer una salida de terminal / consola sin formato.

En la consola de DOS / Windows, la forma estándar de hacerlo es con conio.h , mientras que en Unix / Linux, la biblioteca aceptada para este fin es ncurses ( ncurses básicamente encapsula el comportamiento de caracteres de control que MBCook describe, en una terminal forma independiente).