Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: lDanny en 25 Mayo 2010, 10:06 am



Título: Sber si hay datos en stdin ?
Publicado por: lDanny en 25 Mayo 2010, 10:06 am
Hola, bueno tengo un problema, lo que pasa es que quiero leer de la entrada standard pero cuando hay datos, pero cuando no hay datos se me queda en bucle esperando a que lleguen datos.

Mi pregunta es como se puede saber si en stdin o entrada standard hay datos para leer o no hay datos.
GRacias


Título: Re: Sber si hay datos en stdin ?
Publicado por: h0oke en 25 Mayo 2010, 10:27 am
Recuerda que el teclado es un fichero más.

Código
  1. while(!feof(stdin))//Leeria el teclado hasta que se ingrese un caracter de fin de archivo
Para ver si hay algo, deberías leer nuevamente el teclado, y preguntar si en esa variable hay algo.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.  char *s;
  6.  s = malloc(sizeof(char) * 8);
  7.  fgets(s,8,stdin);
  8.  printf("teclado> %s\n",s);
  9.  free(s);
  10.  s = malloc(sizeof(char) * 8);
  11.  fgets(s,10,stdin);
  12.  printf("HAY ALGO || Nuevo teclado> %s\n",s);
  13.  free(s);
  14. }
Si leyeras el teclado con HOLA MUNDO, en nuevo teclado te quedaria "ndo" si no me equivoco.


Título: Re: Sber si hay datos en stdin ?
Publicado por: lDanny en 25 Mayo 2010, 11:05 am
Gracias por la ayuda pero mi problema no es ese creo xD. Bueno igualmente lo he probado y no me va lo que ocurre es que yo no leo del teclado los datos de entrada se los paso mediante tuberias.
ejemplo:
:  echo "hola" | ./programa
esto  me va bien pq leo bien la entrada standard
: ./programa
Me va mal pq se me queda esperando datos.
He usado


Código:
#include <stdio.h>

int main(){

char buffer[2048];
;
while (!feof(stdin)){
fgets (buffer, 2048, stdin);
printf("%s",buffer);
}
return 0;
}

y si lo pruebas ves que cuando ejecuto  ./programa se queda esperando.
Y gracias por tu rapida ayuda.


Título: Re: Sber si hay datos en stdin ?
Publicado por: h0oke en 25 Mayo 2010, 11:25 am
Te refieres a esto?
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(){
  4.  
  5. char *buffer;
  6. buffer = malloc(sizeof(char)*2048);
  7. fgets(buffer,2048,stdin);
  8. while (*buffer != '\n'){
  9.  printf("%s",buffer);
  10.  free(buffer);
  11.  buffer = malloc(sizeof(char)*2048);
  12.  fgets (buffer, 2048, stdin);
  13. }
  14. free(buffer);
  15. return 0;
  16. }


Título: Re: Sber si hay datos en stdin ?
Publicado por: lDanny en 25 Mayo 2010, 11:36 am
La verdad como ves el codigo que me as pasado es exacto lo que me pasa cuando no le paso nada.
Es por eso que quiero saber cuando hay o no hay datos en la entrada.
Pq no quiero que se me quede esperando a leer datos.
y de nuevo gracias por la ayuda


Título: Re: Sber si hay datos en stdin ?
Publicado por: h0oke en 25 Mayo 2010, 11:37 am
De nadas.

Salu2


Título: Re: Sber si hay datos en stdin ?
Publicado por: lDanny en 25 Mayo 2010, 11:39 am
Ya pero sabes alguna manera de que no se quede en bucle? al no haber datos en la entrada?