problema con read() y open() C

Iniciado por soyloqbuskas, 1 Octubre 2012, 05:39 AM

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

soyloqbuskas

¡Buenas a todos!

Tengo un problemilla con el open y el read. Este es mi codigo.

char * leeFichero(char * path){
        char * datos="";
        int f=0;
        int fileSize=100;
       
        f=open(path, O_RDONLY);
        if(!f) return 0;
        read(f,datos,fileSize);
        printf("datos: %s\n",datos);

        return datos;
}


El caso es que el printf(datos) me sale vacio a pesar de que le paso un path correcto de un fichero con datos...

Y otra cosa mas, ¿como puedo calcular el tamaño del fichero? porque he puesto fileSize=100 porque no sabia calcularlo xD

Gracias, un saludo.
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw

rir3760

El problema se debe a la sentencia:
char * datos="";
En ella declaras el puntero "datos" que utilizaras en la llamada a "read", el problema se debe a que ese puntero:
1) Apunta a una cadena literal y estas no deben modificarse.
2) Aun cuando fuera posible el array solo tiene capacidad para un elemento (el '\0').

Si vas a leer cien caracteres puedes simplemente declarar un array con esa capacidad y pasarlo a la función.

Y para conocer el tamaño en bytes del archivo si estas utilizando Linux (como parece ser el caso) puedes utilizar la función stat.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

leosansan

#2
Cita de: soyloqbuskas link=topic=372382.msg1788640#msg1788640
Y otra cosa mas, ¿como puedo calcular el tamaño del fichero? porque he puesto fileSize=100 porque no sabia calcularlo xD
CitarPrueba con:
fseek(fichero, 0L, SEEK_END);
   printf("prueba.txt ocupa %d bytes", ftell(fichero));
Saludos!.

soyloqbuskas

!!!Muchas gracias a todos por las respuestas!!!

Un saludo.
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw