[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
>  
>