Estudio de getline
    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);
}
   pello.io
    pello.io