elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Por qué es necesario fflush ()?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Por qué es necesario fflush ()?  (Leído 2,621 veces)
mester

Desconectado Desconectado

Mensajes: 219


https://www.youtube.com/watch?v=IlY9C6pzxKc


Ver Perfil WWW
¿Por qué es necesario fflush ()?
« en: 7 Octubre 2016, 14:29 pm »

Hola.
Tengo el siguiente codigo:
Código
  1. char getch (void) {
  2.  fflush (stdout);
  3.  char buf;
  4.  struct termios old = {0}, new = {0};
  5.  
  6.  if (tcgetattr (STDIN_FILENO, &old) < 0)
  7.    return -1;
  8.  
  9.  new = old;
  10.  
  11.  new.c_lflag &= ~ICANON;
  12.  new.c_cc[VMIN] = 1;
  13.  new.c_cc[VTIME] = 0;
  14.  
  15.  if (tcsetattr (STDIN_FILENO, TCSANOW, &new) < 0)
  16.    return -1;
  17.  
  18.  if (read (STDIN_FILENO, (char *)&buf, 1) < 0)
  19.    return -1;
  20.  
  21.  if (tcsetattr (STDIN_FILENO, TCSANOW, &old) < 0)
  22.    return -1;
  23.  
  24.  return buf;
  25. }
  26.  
  27. int main () {
  28.  printf ("Introduce un caracter\n");
  29.   int a = getch ();
  30. ...
  31. }

No entiendo por qué debo poner fflush despues de haber impreso por pantalla el "Introduce un caracter". Es decir, ¿por qué no lo imprime en primera instancia?

Gracias de antemano.


En línea

Justicia es dar a cada uno lo que se merece
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: ¿Por qué es necesario fflush ()?
« Respuesta #1 en: 7 Octubre 2016, 15:16 pm »

Antes de que los datos sean enviados por el stream de salida (stdout, lo que utiliza printf), son almacenados en un buffer. Del buffer no se envían hasta que ocurre un determinado evento, o hasta que haces un flush.


« Última modificación: 7 Octubre 2016, 18:23 pm por ivancea96 » En línea

geeke

Desconectado Desconectado

Mensajes: 93


Ver Perfil
Re: ¿Por qué es necesario fflush ()?
« Respuesta #2 en: 7 Octubre 2016, 16:29 pm »

El buffer se vacía si ocurre alguno de estos tres puntos:

1) Cuando el buffer se llena.
2) Si el texto enviado a la salida estándar termina en '\n'.
3) Mediante la llamada a fflush(stdout).

En tu caso se puede omitir la llamada a fflush(stdout) ya que con el salto de linea se vacía el buffer.
En línea

mester

Desconectado Desconectado

Mensajes: 219


https://www.youtube.com/watch?v=IlY9C6pzxKc


Ver Perfil WWW
Re: ¿Por qué es necesario fflush ()?
« Respuesta #3 en: 9 Octubre 2016, 20:41 pm »

El buffer se vacía si ocurre alguno de estos tres puntos:

1) Cuando el buffer se llena.
2) Si el texto enviado a la salida estándar termina en '\n'.
3) Mediante la llamada a fflush(stdout).

En tu caso se puede omitir la llamada a fflush(stdout) ya que con el salto de linea se vacía el buffer.

¿Y cuando sé que el buffer está lleno? o ¿cómo se su cantidad maxima?
En línea

Justicia es dar a cada uno lo que se merece
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: ¿Por qué es necesario fflush ()?
« Respuesta #4 en: 9 Octubre 2016, 21:44 pm »

En principio el tamaño del buffer no es algo que te deba importar. Él va a trabajar solo. Si tienes urgencia por que salga un mensaje, pon el fflush. Sino, el buffer se suele vaciar solo (generalmente).
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda simple (fflush)
Programación C/C++
Fabi0lo 4 3,440 Último mensaje 29 Septiembre 2012, 10:15 am
por Eternal Idol
[src]problema con fflush() « 1 2 »
Programación C/C++
0x3c 18 8,049 Último mensaje 31 Enero 2013, 20:36 pm
por 0x3c
Ayuda fflush
Programación C/C++
UnchainedGold40 2 2,150 Último mensaje 23 Marzo 2015, 12:56 pm
por eferion
El Visual Studio me ignora el fflush(stdin).
Programación C/C++
Luffy97 3 3,056 Último mensaje 29 Octubre 2015, 18:42 pm
por Kaxperday
Es necesario comprarme otro reloj el que tengo se está cortando un poquito la cuerda? Solo si es necesario « 1 2 »
Foro Libre
Terminator5 11 6,404 Último mensaje 17 Febrero 2023, 23:50 pm
por bettu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines