Probando getline y la maldicion del fin de linea.

/**
* probando getline
* Cual es la forma optima de leer un fichero linea por linea?
* quiza getline es mejor que gets, sobre todo para casos en los que
* cada linea pueda ser muy larga.
* La variable linea es un puntero.
* Guardamos espacio con malloc y por si hay sorpresas el manual de glibc
* nos dice que con getline se okupara mas memoria de forma automatica
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main (int argc, char *argv[]) {

FILE* fichero;
//char linea[512];
char *linea;
int *total;

printf("Hola, has puesto: %s %s
", argv[0], argv[1]);


if ( (fichero = fopen(argv[1],"r")) == NULL ) {
        perror("Error al abrir fichero");
        exit(EXIT_FAILURE);
} else {
        printf("Ok, fichero abierto.
");
}

linea = ((char *)malloc(512));

while ((!feof(fichero)) && (getline(&linea, &total, fichero) != -1)) {

        // le quitamos caracter de salto de linea
        linea[strlen(linea)-1] = '';

        printf("%s> %s [tam: %d]
",argv[1], linea, strlen(linea));

}

close(fichero);

exit(EXIT_SUCCESS);

}
Esta podria ser otra version de iteracion, mas rapida pero que con ficheros vacios "leera" una linea.
/**
* probando getline - version do-while
* Cual es la forma optima de leer un fichero linea por linea?
* quiza getline es mejor que gets, sobre todo para casos en los que
* cada linea pueda ser muy larga.
* La variable linea es un puntero.
* Guardamos espacio con malloc y por si hay sorpresas el manual de glibc
* nos dice que con getline se okupara mas memoria de forma automatica
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main (int argc, char *argv[]) {

FILE* fichero;
//char linea[512];
char *linea;
int *total;

printf("Hola, has puesto: %s %s
", argv[0], argv[1]);


if ( (fichero = fopen(argv[1],"r")) == NULL ) {
        perror("Error al abrir fichero");
        exit(EXIT_FAILURE);
} else {
        printf("Ok, fichero abierto.
");
}

linea = ((char *)malloc(512));

do {
        getline(&linea, &total, fichero);
        // le quitamos caracter de salto de linea
        linea[strlen(linea)-1] = '';

        printf("%s> %s [tam: %d]
",argv[1], linea, strlen(linea));

} while (!feof(fichero));



close(fichero);

exit(EXIT_SUCCESS);

}