[Programación] Re: [Programación] Cantidad de datos
antes de fgets
Nicolás Aimetti
programacion@lugro.org.ar
Thu, 02 Jun 2005 22:44:44 -0300
Hola...
Para husmear en el contenido de un puntero FILE (como es stdin) podes
hacer algo así:
#include <stdio.h>
int main(void){
char c = getc(stdin);
printf(">>: %d\n", (stdin->_IO_read_end)-(stdin->_IO_read_ptr));
return 0;
}
La estructura _IO_FILE está definida en /usr/include/libio.h, por si
querés ver... de todas formas hacer esto es bastante bizarro y
desaconsejable....
Igual no creo que sea esto lo que vos estás buscando, pues esto te diría
cuantos caracteres quedan por leer en el _buffer_ de stdin (o del
archivo en cuestión), o sea, en el buffer de la estructura usada por la
familia de funciones f*, lo cual rara vez tiene alguna utilidad.
Por otra parte, para chequear si un archivo tiene datos para ser leídos
sin quedar bloqueado (quizás esto si sea lo que estas buscando) podes
abrir el archivo con el flag O_NONBLOCK
open("foo.data",O_NONBLOCK);
De todas maneras esto no te va a servir para saber _cuantos_ datos hay
por leer ( read() ), sino que simplemente si hay datos los lee, y sino
sigue su curso sin quedar bloqueado...
Si pensás que algo de esto te puede servir y necesitas que sea más
especifico en algo avisame.
Otra cosa... Olvidándonos de la función fgets (combiene ir a las
fuentes, las llamadas al sistema), no se puede saber cuantos bytes se
van a leer de un descriptor de archivos en una única llamada al sistema
( read() ), pues un archivo en unix es algo de por si algo muy
abstracto, puede ser un socket, el teclado, un archivo del rígido,
etc... Por eso te combiene ser más especifico en la pregunta, o sea,
fgets esta tomando datos del teclado, de un archivo del rígido, etc...?
Bueno, espero que algo de todo esto te sirva de algo...
Saludos,
Nicolás.
Gustavo Guillermo Pérez wrote:
>Hola lista:
>
>Alguien sabe cual era la función o forma de saber cuantos bytes se pueden leer
>de un descriptor de archivos antes de ejecutar fgets?.
>Quiero escanear varios nodos sin bloquear el programa (es para no trabajar con
>Threads).
>
>Saludos
>
>