Sber si hay datos en stdin ?

Iniciado por lDanny, 25 Mayo 2010, 10:06 AM

0 Miembros y 1 Visitante están viendo este tema.

lDanny

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

h0oke

#1
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.

lDanny

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.

h0oke

#3
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;
}

lDanny

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

h0oke


lDanny

Ya pero sabes alguna manera de que no se quede en bucle? al no haber datos en la entrada?