Test Foro de elhacker.net SMF 2.1

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.

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.

#include <stdio.h>
#include <stdlib.h>
int main()
{
 char *s;
 s = malloc(sizeof(char) * 8);
 fgets(s,8,stdin);
 printf("teclado> %s\n",s);
 free(s);
 s = malloc(sizeof(char) * 8);
 fgets(s,10,stdin);
 printf("HAY ALGO || Nuevo teclado> %s\n",s);
 free(s);
}

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



#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?
#include <stdio.h>
#include <stdlib.h>
int main(){

char *buffer;
buffer = malloc(sizeof(char)*2048);
fgets(buffer,2048,stdin);
while (*buffer != '\n'){
 printf("%s",buffer);
 free(buffer);
 buffer = malloc(sizeof(char)*2048);
 fgets (buffer, 2048, stdin);
}
free(buffer);
return 0;
}
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?